複数のオプションの選択を解除する方法

複数のオプションの選択を解除する方法

私はbashスクリプトに初めてアクセスし、スクリプトのこの特定の部分にどのような問題があるのか​​理解していません。私のスクリプトからすべてのアウトレットを選択しようとしています。そして、条件を設定しようとすると、これらの条件がすべて満たされていない場合は無効になり、そうでない場合は有効です。

if [[ `echo $?` -ne {0..4} ]]
then
         echo "Its a Valid Date."
 else
         echo " Not valid date."
fi

私がそれを実行すると、私は得ます:

kpatel138@matrix:~/Lab2> ./cal2 1994 5 4
./cal2: line 40: unexpected argument `(' to conditional binary operator
./cal2: line 40: syntax error near `(0'
./cal2: line 40: `if [[ `echo $?` -ne (0..4) ]]'

答え1

`echo $?`それは執筆の複雑な方法です$?。明らかに簡単な方法がありますが、複雑な方法で仕事をしないでください。

$?0、1、2、3、4の値のいずれかをテストしたいと思います。使用中の構文は意味がありません。 5つの同じケースをすべてテストできます。

if [[ $? -eq 0 || $? -eq 1 || $? -eq 2 || $? -eq 3 || $? -eq 4 ]]; then …

しかし、これは長すぎます。許容範囲を0〜4にしたいので、$?値が最小値より大きく最大値より小さいかどうかをテストします。

if [[ $? -ge 0 && $? -le 4 ]]; then …

$?決して否定的ではないので、テストは重複$? -ge 0します。したがって:

if [[ $? -le 4 ]]; then …

これは算術式を使って書くこともできます。演算子は互いに異なります。括弧内の条件構文は、、、および-eq-ne使用して整数を比較しますが、算術-le式は C と同様の構文を使用します。-ge-lt-gt

if (($? <= 4)); then …

関連情報