我正在编写一个bash脚本来检查多个服务器上是否安装了Tomcat5。运行脚本时,即使存储在变量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‘条件?
发布于 2020-03-30 19:12:20
直接的问题是:无论是否找到任何东西,find都会在没有失败的情况下返回0,您可能会假设它的行为类似于grep,但事实并非如此。您可以捕获它的输出res=$(find ...)并测试它是否为空(test -n),但是...
但老实说,这是一种相当奇怪的方式来检测安装的软件是否存在,这很容易出错。至少可以这样说,假设您留下了一个包含注释的文件:my_tomcat-5_hints。
也许可以询问您的打包管理器是否在主机上使用...或者至少检查特定文件/dir的存在?
你通常不需要是超级用户就能告诉你,如果你是这样做的话,在下一步如果真的需要的话,以一个用户的身份ssh到sudo是有点奇怪的。
https://stackoverflow.com/questions/60928976
复制相似问题