186

2 つのエラー フラグをチェックするスクリプトを作成しようとしています。1 つのフラグ (または両方) が変更された場合、エラーが発生しました。私のスクリプト:

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'

私のブラケットは台無しですか?

4

4 に答える 4

288

-a(for and) および-o(for or) 操作を使用します。

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

あなたの場合、最後の2つの式を破棄して、次のような1つまたは操作に固執することができます:

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
于 2013-04-24T22:12:40.520 に答える
83

[[または((キーワードのいずれかを使用できます。[[キーワードを使用する場合は、 -eq,などの文字列演算子を使用する必要があります-lt。、 、((などの演算子を直接使用できるため、算術演算には が最も好ましいと思います。==<>

[[演算子の使用

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演算子を使用しないでください。

于 2013-11-28T10:08:11.713 に答える
8

フォローしてみてください

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!"
于 2016-09-11T06:06:59.780 に答える