Untilループにifステートメントを入れることはできますか?

Untilループにifステートメントを入れることはできますか?

untilユーザーに繰り返し数字を求めるループを含むスクリプトを作成する必要があります。 - 50回でない場合、「間違った番号です。もう一度お試しください」というメッセージが表示されます。 - 別の番号をリクエストしてください。 - 数字が50の場合、「成功しました!」というメッセージを表示して停止します。

これが私が今まで持っているものです:

    echo -n "please choose a number: "
    read number
    until [$number -eq 50];
    do
         if [$number !=50]
         then 
               echo "Wrong number; try again" 
               read wrong 
         else 
               echo -n "Please choose a number: "
               read newnum
         fi
    done 

「番号を選択してください」ステートメントを繰り返す方法がわかりません。私はいつもエラーが発生します。

      syntax error near unexpected token 'fi' 

オンラインで探していますが、UNTILループの入出力の明確な例はありません。

ベストアンサー1

echo -n "please choose a number: "

read number
until [ $number -eq 50 ]
do
     # if [ $number -ne 50 ]
     # then 
           echo "Wrong number; try again" 
           read number 
     # fi
done 

echo You got it\!

最初のread変数はから読み込まれますnumber。ループは50になるuntilまで続きます。$number

ループ内のテストは、数値が50(等しくない)untilの場合にのみ入るため、不要です。-ne

あなたが持っている主な問題は、readループ内で設定チェック()numberuntil同じ変数を更新する必要があることです。

ifスペースで囲まれた次の単語がコマンド名であるため、スペースも重要です。[$number入力したが「[」というプレフィックスが付いた項目を評価します。これは、既存のコマンドの名前ではない可能性が高いです。たとえば、最初の推測がある場合、コマンド42ifコマンドを実行しようとし、[42次のエラーが発生します。[42: not found

また、数値比較は、、、、、-eq-lt使用して行われます。-ge-gt-ge-ne

=そして=!文字列の場合。

おすすめ記事