使用带有 read 命令的 for 循环

使用带有 read 命令的 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!"

相关内容