私は次のコードを持っている:あなたは疑問に思う場合には「$opt
が空の間、」無限whileループのKornシェルで
#!/bin/ksh
echo "1) Option 1"
echo "2) Option 2"
echo "3) Option 3"
echo "4) Option 4"
opt=0
while [ x$opt = "x" ] || [ $opt != "1" ] || [ $opt != "2" ] || [ $opt != "3" ] || [ $opt != "4" ]; do
printf "Enter [1|2|3|4] : "
read -r opt
done
echo "Option selected : $opt
while [ x$opt = "x" ]
手段を。 OK、何か予期せぬ何かを入力しないとき
Will:/home/will> ./script.ksh
Enter [1|2|3|4] :
Enter [1|2|3|4] : jde
Enter [1|2|3|4] : 1
Enter [1|2|3|4] : 2
Enter [1|2|3|4] : 3
Enter [1|2|3|4] : 4
Enter [1|2|3|4] :
だから、それはループ:
は、ここでの出力です。 しかし、最後のecho
メッセージを表示する必要があるときに、1/2と3と4が入力されたときに、なぜループしますか?
EDIT: 私は、whileループでecho $opt
追加されている、そしてそれはこの私を出力します。
Enter [1/2/3/4] : d
d
Enter [1/2/3/4] : 1
1
Enter [1/2/3/4] :
だから$ optが、それが必要として、ユーザの入力を受けたが、しばらくはまだ壊れることはありません。
'||'の代わりに '&&'を使用すると、マイコードは ''選択された出力 ''オプションがすぐに存在します:0'。 '[" x $ opt "=" x "]'を削除すると動作しますが、この場合はユーザーが何も入力しないとスクリプトがクラッシュします – Will
最新の編集済みの回答を確認してください。私は 'opt = 0'を単に' opt = 'に変更し、引用符も変更しました。 – anubhava
私は引用符を追加し、 '$ opt'宣言から0を取り除いたところ、' ./t[7:test:argument expected':/ – Will