1. ホーム
  2. bash

[解決済み] Bashのif文で複数の条件を指定するとエラーが発生する

2022-03-07 14:22:29

質問

2つのエラーフラグをチェックし、片方(または両方)のフラグが変更された場合、echo--エラーが発生するスクリプトを書こうとしています。私のスクリプトです。

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 (andの場合)と -o (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