逃逸字符串我有这个简单的bash脚本:在bash
#!/bin/bash
isRunning=$(ps -Af | awk '{if ($11 == "HomeDir") { print $0 }}' | wc -l)
if [ $isRunning == "0" ]; then
echo "Script is running"
fi
该脚本返回:
./script.sh: line 3: [ 0: command not found
我做了什么错?
逃逸字符串我有这个简单的bash脚本:在bash
#!/bin/bash
isRunning=$(ps -Af | awk '{if ($11 == "HomeDir") { print $0 }}' | wc -l)
if [ $isRunning == "0" ]; then
echo "Script is running"
fi
该脚本返回:
./script.sh: line 3: [ 0: command not found
我做了什么错?
简化:
if [ -n "$(ps -Af | awk '$11 == "HomeDir"')" ]; then echo "running"; fi
更改if
到:
if [ "$isRunning" -eq "0" ]; then
的test
运营商平等=
,不==
。此外,采取定制包围,以防万一通过"
变量:
if [ "$isRunning" = "0"] ; then ...
或只使用-eq
,作为codaddict建议。
你正在使用bash,所以我觉得“==”是完全确定: http://www.gnu.org/software/bash/manual/bashref.html#Bash-Conditional-Expressions
$ [ a == b ]
$ echo $?
1
$ [ a == a ]
$ echo $?
0
我在我的机器上运行脚本,但我没有得到你的错误。我的bash版本是4.1_p9。你也可以试试[[foo == bar]],它应该适合你。
为什么你需要一个脚本? 简单的命令就足够了。
ps -Af | awk '{if ($11 == "HomeDir"){counter++}END{if(counter>0)print "script is running"}}'
ps -Af | grep -q -E'^([^] + +){10} HomeDir'&& echo“Script is running”is even more simple :) – XzKto
除了显而易见的,如果你打算管道ftom'ps'给AWK输出的麻烦,你还不如重写awk脚本打印的东西明智而有用,并避免愚蠢的'wc -l'。更多关于古老的[UUCA谩骂页面] [1]。 [1] http://www.iki.fi/era/unix/award.html – tripleee