顺便说一句,我正在尝试运行我的脚本,当我的#8; 8443'端口不听。为此,我在命令提示符下写了一个如下命令,
if [ ! ps aux | grep '[8]443' | awk '{print $2}'] ]; then sh boot.sh; fi
这给了我如下的错误。
awk: {print $2}]
awk: ^ syntax error
bash: [: missing `]'
如何用正确的语法编写这个?
答案 0 :(得分:1)
这是您正在使用的奇怪语法。
如果我理解了代码,那么您正在执行ps aux
,并且如果第二列上没有代码8443
的行,则您希望运行脚本boot.sh
。
您可以使用以下内容:
if [ -z "$(ps aux | awk '$2==8443')" ]; then
sh boot.sh
fi
-z
表示:" STRING的长度为零"。因此,通过检查是否有任何第二列ps aux
作为值来检查awk
与8443
的输出。在这种情况下会有一些输出,因此-z
将为false并且命令不会被执行。但如果没有输出,-z
将为真,并且boot.sh
将被执行。
你的方法失败了,因为你在做:
if [ ! .... ] ];
既不正确执行命令也不检查其输出是否正确:你有一个]
太多了。
答案 1 :(得分:0)
尝试
TMPVAR=`ps aux | grep '[8]443' | awk '{print $2}'` if [ "$TMPVAR" != "" ] ; then sh boot.sh ; fi