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'
私の括弧はめちゃくちゃになっていますか?
-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
あなたのケースでは、あなたは最後の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
[[
または((
のどちらかのキーワードを使用できます。 [[
キーワードを使用するときは、-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
演算子は移植性がないので使用しないでください。
フォローしてみてください
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!"
指定された変数が設定されているかどうかをチェックするMySQLの貢献者によって書かれたentrypoint.sh
script を読むことで、何かインスピレーションを得ることができます。
スクリプトが示すように、あなたはそれらを-a
でパイプ処理することができます。
if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" -a -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
...
fi