在Unix中使用If语句的问题

时间:2011-08-03 13:33:30

标签: unix sh

我是shell脚本的新手,需要一些帮助。我试图写一个脚本来反弹一些服务器,我的if语句有一些问题。下面的第一个和第二个给出了too many arguments错误。

对于第一个,我是变量$jmsProcess是一个ps -ef | grep命令,我只想进入if-statement,如果这会返回一些结果。这是第二个问题。

在第三个if-statement我希望它检查这些变量中的任何一个是否具有值true但是这给了我一个

if[ [ false || false ] == true ]: command not found

错误。

#Check the JMS process has been killed
  if [ $jmsProcess != null ] # SHOULD THIS BE NULL???
  then
    echo "JMS Process is still running"
    $jmsRunning = "true"
  fi

#Check the Bone process has been killed
if [ $boneProcess != null ] # SHOULD THIS BE NULL???
then
     echo "B-One Process is still Running"
     $boneRunning = "true"
fi

if[ [ $jmsRunning || $boneRunning ] == true ] # CHECK THIS FOR QUOTES
then
#   $killProcess
fi

2 个答案:

答案 0 :(得分:2)

null不是Bash关键字。如果要检查是否定义了变量,可以执行以下操作:

if [ "${var+defined}" = defined ]

检查它是空的还是未定义的:

if [ -z "${var-}" ]

答案 1 :(得分:0)

我们不知道你是如何设置任何变量值的(jmsProcess,boneProcess)。

尝试包围所有var值,例如“$ var”(使用dbl-quotes)并查看错误消息是否更改。

上面的代码中也存在许多语法问题。很难说它是否是在这里发布的工件,(代码块功能相当强大),所以我将评论我看错了。

if[ [ false || false ] == true ]: command not found

这里有很多问题:false是一个shell命令。尝试在命令行上键入它,然后执行echo $?。你应该看到1true; echo $?将返回0.但if语句根据最后一个返回码继续或转入else块(有一些特殊情况例外)。

另外,我猜你正试图用[ false || false ] == true制作某种reg exp。不行。见下文。

您可以将状态变量设置为具有false(或true)的值,该值将由shell正确评估。

此外,if[将提供'未找到命令'消息。因此,通过使用值为false的变量,您可以执行

尝试

jmsRunning=false ; boneRunning=true
if [[ ${jmsRunning} || ${boneRunning} ]] ; then           
  echo both NOT running
else
  echo at least 1 is running
fi

将两者都更改为false以查看邮件更改。

另外,null只是shell脚本中的一个字符串,你可能意思是“”。

最后,var赋值不能在'='符号周围有空格,并且当它位于声明的左侧时,不要在前面使用'$'字符,即

boneRunning=true 

我希望这会有所帮助。