私は bash スクリプトの初心者で、スクリプトのこの特定の部分の何が問題なのか理解できません。スクリプトにあるすべての exit を選択しようとしています。そして、それらの条件がすべて満たされない場合は無効で、そうでない場合は有効であるという条件を設定しようとしています。
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
が使用されますが、算術式では C のような構文が使用されます。-le
-ge
-lt
-gt
if (($? <= 4)); then …