这些来自 shell 脚本的命令起什么作用?

这些来自 shell 脚本的命令起什么作用?

我刚刚开始学习 bash。我有以下脚本,我想知道以下命令的作用,以便开始了解这个世界。

if [ ! -w "." ]
then
echo "You need write permission in the directory"
exit 1
fi

firefoxGeditOpen=ps -d | grep -ic -e firefox -e gedit
if [[firefoxGeditOpen>0]]
then
echo "Firefox and Gedit must be closed to let the script work"
exit 1
fi

while(true)
do
firefox &
firefoxPid=$!
gedit &
geditPid=$!
echo "Firefox PID $firefoxPid Gedit PID $geditPid">>result.txt
wait
echo "You have closed all the processes. They will be re-opened">>result.txt
done

提前致谢!

答案1

如我所说在我的评论中这里缺少一些重要部分,这些命令放在一起不太有意义,但我会仔细介绍它们。

  1. if [ ! -w "." ].表示当前目录。-w测试它是否可写。!否定测试(因此,如果目录不是可写与相反)。

  2. ps -d | grep -ic -e firefox -e geditps -d打印所有进程减去会话启动者。grep搜索管道输出中的ps模式(我们稍后会讲到)。-i使搜索不区分大小写。-c输出数数匹配次数而不是实际匹配次数。-e采用搜索表达式。在本例中为firefoxgedit。因此,如果 FF 和 gedit 均未运行,则命令将输出 0。如果其中一个正在运行,则输出 1。如果两个都在运行,则输出 2。

  3. firefox &:启动 Firefox。&强制该进程进入后台。

  4. firefoxPid=$!:在 bash shell 脚本中$!保存最后一个后台命令的作业编号。firefoxPid是一个变量。因此,这里发生的事情是最后一个后台命令(恰好是 Firefox 的)的作业编号存储到名为的变量中firefoxPid

相关内容