具有多个条件的 Bash if 语句抛出错误

标签 bash if-statement flags

我正在尝试编写一个脚本来检查两个错误标志,如果一个标志(或两个)被更改,它会回显——发生错误。我的脚本:

my_error_flag=0
my_error_flag_o=0
do something.....
if [[ "$my_error_flag"=="1" || "$my_error_flag_o"=="2" ] || [ "$my_error_flag"="1" &&     "$my_error_flag_o"="2" ]]; then
    echo "$my_error_flag"
else
    echo "no flag"
fi

基本上,它应该是:

if ((a=1 or b=2) or (a=1 and b=2))
  then
     display error
else
     no error
fi

我得到的错误是:

 line 26: conditional binary operator expected
 line 26: syntax error near `]'
 line 26: `if [[ "$my_error_flag"=="1" || "$my_error_flag_o"=="2" ] || [ "$my_error_flag"="1" && "$my_error_flag_o"="2" ]]; then'

我的括号弄乱了吗?

最佳答案

使用-a(用于和)和-o(用于或)操作。

tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html

更新

实际上,您仍然可以将 &&||-eq 操作一起使用。所以你的脚本应该是这样的:

my_error_flag=1
my_error_flag_o=1
if [ $my_error_flag -eq 1 ] ||  [ $my_error_flag_o -eq 2 ] || ([ $my_error_flag -eq 1 ] && [ $my_error_flag_o -eq 2 ]); then
      echo "$my_error_flag"
else
    echo "no flag"
fi

虽然在你的情况下你可以丢弃最后两个表达式并坚持使用一个或这样的操作:

my_error_flag=1
my_error_flag_o=1
if [ $my_error_flag -eq 1 ] ||  [ $my_error_flag_o -eq 2 ]; then
      echo "$my_error_flag"
else
    echo "no flag"
fi

关于具有多个条件的 Bash if 语句抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16203088/

相关文章:

bash - 基于 bash 中循环操作的带有错误代码的退出脚本

PHP - 重构此 if 语句以避免重复

python - 多分支逻辑的标记用法

java - 这个叫什么? (就像二进制文件一样,我认为呢?)

bash - 当我没有要求时,Curl 正在解压缩压缩文件

linux - 使用 getopts 进行 bash

javascript - 使用 JQuery 更改 insideHTML 内容

function - 如何在Powershell脚本中将参数化函数作为标志的别名?

linux - bash 案例复合模式不起作用

c++ - 使用 vector 控制显示输出