bash - Bash 中输出错误的多个条件

标签 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

预先感谢您提供的所有帮助。

最佳答案

-eq 仅用于整数比较。

最好像这样简化代码:

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

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

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

关于bash - Bash 中输出错误的多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24018979/

相关文章:

javascript - 卡在 else if 循环中

java - Unix 脚本 : accessing required . 耳文件(按文件名掩码)

linux - 如何将终端中定义的变量读取到 bash 脚本

linux - 该脚本有时在 wget 之后不运行

linux - 使用带有感叹号的命令重复时如何隐藏命令?

python - Bash 脚本到 Conda 安装 requirements.txt 与 PIP 跟进

c++ - 在 c++ 中满足某些条件(如果)后,如何重新启动 while 循环?

jquery - 如何使用 'If $(this) has data-attribute'

c++ - 如何干净利落地结束 Lua 线程?

linux - 两个文件与 while .sh 的比较