Bash中的多个条件用于输出错误

时间:2014-06-03 15:22:39

标签: bash if-statement scripting

我的问题类似于之前多次询问过的问题。我有一个脚本,可以检查机器上的多个变量并记录该数据。例如,我正在检查机器上的防火墙和加密,如果其中一个或两个都关闭,我需要确切地回显关闭的内容。我正在考虑使用类似的东西......

if [ $firewall -eq "Off" ] ||  [ $Encryption -eq "Off" ]; then
echo Please fix ****
else
echo "Everything is great"
fi

我遇到了如何解析第二行数据的问题。

编辑:我已经得到了一些很好的答案,但我很好奇的是,如果我列出了正在检查的5件事情,我将如何工作呢?说其中2个不符合标准。我想只输出那些没有传递给最终用户的人,以便他们知道他们需要修复什么?

所以考虑到上面的例子,假设我正在测试防火墙,加密,补丁和磁盘空间。如果用户需要修复防火墙和加密,我只想输出那两个。如果另一个用户遇到磁盘空间问题,一个用户问题,另一个用户一切正常,那么一切都很好。

编辑2:* 我正在提取我需要的信息,唯一的问题是我需要有两个不同的弹出窗口之一。要么显示出错的是什么,哪个可以是任意数量的事情,要么显示一切正常。

到目前为止,我已经提出了下面的代码,但它显示了两个窗口,一个显示错误,另一个“一切都很棒”按顺序弹出。我哪里错了?

for i in Software Firewall XProtect; do
    if [[ "${!i}" == "Off" ]]; then 
        osascript -e 'tell app "System Events" to display dialog "Compliance Check results \r \r'$i' needs attention\r \rPress OK to continue."'
    Elseif
        osascript -e 'tell app "System Events" to display dialog "Compliance Check results \r \rEverything looks good. \r \rPress OK to continue."'
    fi
done

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

-eq仅用于整数比较。

最好像这样简化代码:

if [ "$firewall" = "Off" ]; then
   echo "firewall is Off"
elif  [ "$Encryption" = "Off" ]; then
   echo "Encryption is Off"
else
   echo "Everything is great"
fi

编辑:要检查多个变量,您可以使用此for loop

for i in A B C D; do
    [[ "${!i}" == "Off" ]] && echo "$i is Off"
done

答案 1 :(得分:0)

试试这个

if [[ ${firewall:-}  = "Off"  ||  ${Encryption:-} = "Off" ]]; then
   echo Please fix ****
else
   echo "Everything is great"
fi