我正在编写bash脚本以检查多台服务器上是否安装了Tomcat 5。运行脚本时,即使存储在变量command
中的find命令什么也没有返回,但tomcat变量在if语句中仍设置为'1'。
我知道我的if语句肯定有问题,但是我不确定是什么问题。下面是在远程服务器上运行命令的函数
function search() {
local login=$1
local server_fqdn=$2
local command="sudo find / -name \"tomcat-5*\""
ssh -oBatchMode=yes -o ConnectTimeout=6 $login@$server_fqdn "$command"
if [ "$?" = 0 ];
then
echo "Tomcat found"
tomcat=1
else
echo "No tomcat here!"
fi
}
如果command
什么都不返回,如何获得输入“ else”条件的函数?
直接的问题是:无论是否发现任何东西,find
都不会失败时会返回0
,您可能会假定行为类似于grep
,但事实并非如此。您可以捕获其输出res=$(find ...)
并测试它是否不为空(test -n
),但是...
但是说实话,这是一种很容易检测到已安装软件存在的奇怪方法。至少可以说,假设您留下了一个带有注释的文件供以后使用:my_tomcat-5_hints
。
也许问您的包装经理是否正在主机上使用...或至少检查是否存在特定文件/目录?
[您通常不需要超级用户来告诉任何一个,如果这样做,作为一个用户,ssh
有点奇怪,如果确实需要,那么下一步则是sudo
。