exist - Bash如果語句有多個條件會引發錯誤



bash shift (3)

我試圖編寫一個腳本來檢查兩個錯誤標誌,並且如果一個標誌(或兩者)被改變,它會回顯 - 錯誤發生。 我的腳本:

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'

我的括號是亂了嗎?


你可以使用[[((關鍵字)當你使用[[關鍵字,你必須使用字符串運算符,如-eq-lt 。我認為, ((對於算術是最優選的,因為你可以直接使用運算符as ==<>

使用[[運營商

a=$1
b=$2
if [[ a -eq 1 || b -eq 2 ]] || [[ a -eq 3 && b -eq 4 ]]
then
     echo "Error"
else
     echo "No Error"
fi

使用((運算符

a=$1
b=$2
if (( a == 1 || b == 2 )) || (( a == 3 && b == 4 ))
then
     echo "Error"
else
     echo "No Error"
fi

不要使用-a-o操作符因為它不是便攜式的。


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

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

請嘗試以下

if ([ $dateR -ge 234 ] && [ $dateR -lt 238 ]) || ([ $dateR -ge 834 ] && [ $dateR -lt 838 ]) || ([ $dateR -ge 1434 ] && [ $dateR -lt 1438 ]) || ([ $dateR -ge 2034 ] && [ $dateR -lt 2038 ]) ;
then
    echo "WORKING"
else
    echo "Out of range!"




flags