2011-09-15 337 views
0

我有一个shell脚本以下行:shell脚本错误

if [ -f /etc/init.d/tomcat6 && ps -C java|grep -qs 'java' ]; then 

,当我尝试运行它会抛出了以下错误:

line 12: [: missing `]' 

我有一种感觉,这是一个编码问题,因为我一直在windows xp pc上编辑Notepadd ++中的文件,我确定我已经设置编码以UTF-8编码,没有BOM,并且所有行结束都是linux样式,但我仍然收到这个错误。

任何人都可以帮忙吗?

感谢

回答

2

尝试

if [ -f /etc/init.d/tomcat6 ] && ps -C java | grep -qs 'java'; then 
    ... 
fi 

[是基本上为test命令的别名。 test不知道任何关于论点ps。或者您也可以使用test明确地(只是为了澄清语法):如果你使用[代替test

if test -f /etc/init.d/tomcat6 && ps -C java | grep -qs 'java'; then 
    ... 
fi 

,你被迫与]结束的表达。

+1

除了'ps'永远不会传递给'''。 –

+2

[期望它的最后一个参数是']',而语法错误是它不是。 shell调用3个命令:“[-f /etc/init.d/tomcat6”和“ps -C java”和“grep -qs'java']”...除了它实际上没有调用第二个第一个失败(所以你不会从grep得到有关文件']'的错误,不存在。) –

1

&&结束你的[命令。

if [ -f /etc/init.d/tomcat6 ] && ps -C java | grep -qs 'java'; then 
1

的语法是-a

您需要运行ps -C java|grep -qs 'java',它目前被评估为一个表达式。试试这个:

if [ -f /etc/init.d/tomcat6 -a $(ps -C java|grep -qs 'java') ]; then