我一直在自学 bash 脚本,但遇到了一个问题。我编写了一个脚本来使用“读取”命令从用户那里获取输入,并使该输入成为稍后在脚本中使用的变量。该脚本有效,但是......
我希望能够使用“对话框”进行设置。我发现
'dialog --inputbox' 会将输出定向到 'stderr',为了将该输入作为变量,您必须将其定向到一个文件,然后检索它。我发现解释这一点的代码是:
#!/bin/bash
dialog --inputbox \
"What is your username?" 0 0 2> /tmp/inputbox.tmp.$$
retval=$?
input=`cat /tmp/inputbox.tmp.$$`
rm -f /tmp/inputbox.tmp.$$
case $retval in
0)
echo "Your username is '$input'";;
1)
echo "Cancel pressed.";;
esac
Run Code Online (Sandbox Code Playgroud)
我看到它使用 2> 将 sdterr 发送到 /tmp/inputbox.tmp.$$,但输出文件看起来像“inputbox.tmp.21661”。当我尝试 cat 文件时,它给了我一个错误。所以我仍然无法从 --inputbox 获取用户输入作为变量。
示例脚本:
echo " What app would you like to remove? "
read dead_app
sudo apt-get remove --purge $dead_app
Run Code Online (Sandbox Code Playgroud)
所以你可以看到它是一个基本的脚本。甚至有可能将变量作为一个词从dialog --inputbox?
我是编写脚本的新手。所以我希望这很简单。我正在编写的脚本用于收集系统信息并将其保存为 html 文件。
当我运行时:
sudo lshw -short
Run Code Online (Sandbox Code Playgroud)
它列出了系统上的所有硬件。
当我运行时:
sudo lshw -short | grep processor
Run Code Online (Sandbox Code Playgroud)
它返回(点代表空格)
/0/4 ...........................................processor................................................ AMD FX(tm)-6100 Six-Core Processor"
Run Code Online (Sandbox Code Playgroud)
我的问题是如何删除处理器前面的所有内容。或者我如何只显示“处理器”之后的内容。我尝试了 grep 的其他几个选项,并试图找到一个 awk 命令来工作,但我的尝试失败了。
如果需要更多信息,请告诉我。