#!/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
您的代码未按预期工作的原因是
- 读取循环中每次迭代的数字,以及
- 从不递减/递增循环中的数字
while
,或者 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!"