読み取りコマンドで for ループを使用する

読み取りコマンドで for ループを使用する
#!/bin/bash
echo -n "Enter a number >"
read number
for var in $number
do
  read number
  echo $var
done
echo "Go!"

8-1の数字を縦に印刷して最後に「go」と言いたいです。コード8を実行すると、Go!が印刷されます。

答え1

使用seq:

#!/bin/bash
echo -n "Enter a number > "
read number
seq "$number" -1 1
echo "Go!"

出力:

Enter a number > 8
8
7
6
5
4
3
2
1
Go!

コードを少し改善するには、プロンプトを次のように出力しますstderr

>&2 echo -n "Enter a number > "

または、-p次のオプションを使用してくださいread

read -p 'enter a number > ' number

答え2

コードが期待どおりに機能しない理由は次のとおりです。

  1. ループの各反復の数字を読み、
  2. ループ内の数字を減らさないでくださいwhile
  3. forループ反復に対して正しい範囲が生成されません。

では、zsh次のことができます。

read '?Enter a number > '
printf '%s\n' {1..$REPLY} 'Go!'

これは、ユーザーからデータを読み取り、REPLY数値リストを生成する中括弧拡張でそのデータを使用します(ユーザーが有効な数値を入力した場合)。リストの末尾に文字列を追加し、Go!改行文字を区切り文字として使用してすべての文字列を印刷しますprintf

答え3

あなたはできます:

#!/bin/bash
echo -n "Enter a number: "
read number
for ((i=number; i>0; i--))
do
  echo $i
done
echo "Go!"

または:

echo -n "Enter a number: "
read number
while ((number>0))
do
  echo $number
  let number--
done
echo "Go!"

関連情報