我是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
答案 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 $?
。你应该看到1
。 true; 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
我希望这会有所帮助。