
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
ループ内で設定チェック()number
とuntil
同じ変数を更新する必要があることです。
if
スペースで囲まれた次の単語がコマンド名であるため、スペースも重要です。[$number
入力したが「[」というプレフィックスが付いた項目を評価します。これは、既存のコマンドの名前ではない可能性が高いです。たとえば、最初の推測がある場合、コマンド42
はif
コマンドを実行しようとし、[42
次のエラーが発生します。[42: not found
。
また、数値比較は、、、、、-eq
を-lt
使用して行われます。-ge
-gt
-ge
-ne
=
そして=!
文字列の場合。
答え2
他の回答にはプログラムに関するより一般的な提案があるので、次のような実際のエラーをお知らせします。if
if [$number !=50]
それが必要です:
if [ $number -ne 50 ]
ここで3つを変えました。
!=
で置き換えました-ne
。最初のものは無効です。[
との間にスペースを追加しました$number
。 (最初の手順を修正してこれを行わない場合はどうなるか確認してください。)
もちろん、予期しない動作をする奇妙なプログラムを見るでしょうが、プログラムは実行されます:)
答え3
私はそうします:
#!/usr/bin/env bash
while :; do
read -p "Please choose a number: " number
[ "$number" -eq 50 ] 2>/dev/null
case $? in
0) break ;;
1) echo "Wrong number; try again." ;;
2) echo "Not a valid number; try again." ;;
esac
done
echo "You got it!"
必要に応じてwhile
交換する場所until
。ところが、教授様がそうなると思います。いいえMusicstringsがこのプログラムを提出していただければ幸いです。 :)
答え4
あなたの予期しないタグ「fi」の近くに構文エラーがあります。then
そして、後にCR文字などの見えない文字がなければ、公開されたコードで説明することはできませんelse
(ファイルがMicrosoft OSの場合、行区切り文字はLFではなくCRLFですが、DOS形式のファイルの場合、do
CRのためまたは後に他のエラーメッセージが表示されると予想しましたdone
。
編集する: 問題の改訂履歴を見ると、次のエラーに該当するようです。以前のバージョンのスクリプト。
すでに指摘したように、コマンド構文には引用符がない変数などの多くのエラーがありますが、[
ループ構文は次のようになりますuntil
。
until
condition-command-list
do
action-command-list
done
condition-command-list
たとえば、必要な数のコマンドを使用できるため、action-command-list
次のことができます。
until
printf 'please choose a number: '
read number || [ -n "$number" ] || exit
[ "$number" -eq 50 ]
do
echo >&2 'Wrong number; try again'
done
その|| exit
部分はEOFでスクリプトを終了することです(そうでなければ、実行中にスクリプトのstdoutが閉じられると永久に繰り返されますecho 49 | your-script
)。