在Bash条件下为假阳性

问题描述 投票:0回答:1

我正在编写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”条件的函数?

bash if-statement
1个回答
0
投票

直接的问题是:无论是否发现任何东西,find都不会失败时会返回0,您可能会假定行为类似于grep,但事实并非如此。您可以捕获其输出res=$(find ...)并测试它是否不为空(test -n),但是...

但是说实话,这是一种很容易检测到已安装软件存在的奇怪方法。至少可以说,假设您留下了一个带有注释的文件供以后使用:my_tomcat-5_hints

也许问您的包装经理是否正在主机上使用...或至少检查是否存在特定文件/目录?

[您通常不需要超级用户来告诉任何一个,如果这样做,作为一个用户,ssh有点奇怪,如果确实需要,那么下一步则是sudo

© www.soinside.com 2019 - 2024. All rights reserved.