ユーザーから入力を受けていくつかの条件を確認した後、新しい変数に保存するように設計された次のコードをテストしています。ただし、このコードはシェル端末で実行されたときに出力やエラーを提供しません。ファイルに実行権限を付与しましたsudo chmod +x test.sh
。
#!/bin/bash
counter="0"
iso_val="100"
while [ "$counter" == "3" ]
do
echo -n "Enter ISO [ 100-800 ]: "; read iso
if (( "$iso" < "100" )) || (( "$iso" > "800" )); then
echo "Error!"
elif [ "$iso" == "" ]; then
echo "Error!"
else
iso_val=$iso
break
fi
counter=$[$counter + 1]
done
答え1
作成したスクリプトはエラーなしで実行され、出力は生成されません。
クイックメモ:デバッグ時に良い起動を得るには、一時的にスクリプトの先頭に追加するset -x
必要があります。bash
問題は次の行にあります。
while [ "$counter" == "3" ]
行の後のブロックはdo
同じ場合にのみ実行されますが、ブロックが実行されない場合は増加しません。$counter
3
$counter
do
カウンターを増やすには、実行したいブロックの外で操作を実行する必要があります。つまり
#!/bin/bash
counter="0"
iso_val="100"
while [ "$counter" -lt 3 ]
do
echo -n "Enter ISO [ 100-800 ]: "; read iso
if [ -z "$iso" ] || [ "$iso" -lt 100 ] || [ "$iso" -gt 800 ]; then
echo "Error!"
else
iso_val=$iso
break
fi
counter=$(($counter + 1))
done
実行回数に制限を設定しましたwhile
。それ以外の場合、スクリプトはエラーで終了しません。また、可能な限り文字列比較を整数比較に変更します。
編集:「エラー時に最大3回要求」コメントに明示的な要件を持つ新しいスクリプト