
コードの概要 (または実行すべきこと): ユーザーは質問を受け取り、5 ~ 20 の有効な参加者番号を入力する必要があります。次に、この入力の数に基づいて質問を繰り返す必要があります (参加者が 5 人の場合、名前と国に関する質問を 5 回繰り返します)。名前が 10 文字を超える場合、または国がイタリアでない場合は、ユーザーに質問を正しく繰り返すように求める警告メッセージが表示されます。申請者が正しい情報を入力したら、名前と国の入力の両方が外部ファイルに送信されます。これは、申請者ごとに繰り返されます。
名前と国の値のループを実装しようとしましたが、無限にループするか、値の 1 つが正しくない場合にループが継続するようです。これは増分と関係があると思いますが、何をすればよいのかよくわかりません。
何かヒントがあればいただければ幸いです。
#!/bin/sh
i=0
read -p "Welcome to the lottery program. Please enter a number of participants between 5-20." input
while [ $input -lt 5 ] || [ $input -gt 20 ]
do
read -rp "Number of people must be 5-20" input
done
while [ $i -lt $input ]
do
read -p "Enter name(max 10 characters)" name
read -p "Enter country(only for people outside of Italy)" country
while [ ${#name} -gt 10 ]
do
read -p "The name was too long (over 10 chars). Please re-enter: " name
done
while [ "$country" = "Italy" ]
do
read -p "Italy is not included within the program. Please try again" country
done
while [ ${#name} -le 10 ] && [ "$country" != "Italy" ]
do
echo $name $country >>echo.txt
i=$((i+1))
done
done
echo "The records have been saved $input times"
答え1
先週の投稿を編集しました。Linuxスクリプトから転送したときに何が起こったのか、多分スペースが間違っています。全部入力してみますので、理解できるといいですね。必要な場合は遠慮なく質問してください。また、ターミナルからの正確なエラー コードなど、どのようなエラーが発生しているかを書いてください。
#!/bin/sh
i=0
echo -e "Please enter a number of participants between 5-20 :\c"
read input
while [ $input -lt 5 ] || [ $input -gt 20 ]
do
read -rp "Number of people must be 5-20" input
done
while [ $i -lt $input ]
do
read -p "Enter name(max 10 characters) :" name
read -p "Enter country(only for people outside of Italy) :" country
if [ ${#name} -le 10 ] && [ "$country" != "italy" ]
then
i=$((i+1))
echo $name $country >> echoed.txt
elif [ ${#name} -gt 10 ]
then
read -rp "your name is too long! re-enter!"
else
echo "Italy isnt accpeted"
fi
done
echo "All $input records are saved!"