#!/bin/bash
printf "Type in a whole number!: " && read X
x=1
while [ $x -le 5 ]
do
echo x
x=$(( $x - 1 ))
done
我希望这个脚本让用户输入一个数字并让它从那个数字“x”开始倒计时并停在 0。我不知道为什么它只是无限地继续前进而不是停在 0。
#!/bin/bash
printf "Type in a whole number!: " && read X
x=1
while [ $x -le 5 ]
do
echo x
x=$(( $x - 1 ))
done
我希望这个脚本让用户输入一个数字并让它从那个数字“x”开始倒计时并停在 0。我不知道为什么它只是无限地继续前进而不是停在 0。
由于您
bash
使用的是 POSIX,因此您可以使用一些在 POSIX 中可能不可用的功能/bin/sh
。例如:read
接受提示字符串,无需单独printf
您可以使用算术表达式
(( x > 0 ))
代替[ x -gt 0 ]
测试括号,并使用后缀减量((x--))
bash 有一个
until
结构,对于倒计时来说可能更惯用例如:
前任。
如果我理解正确,您的代码的
x=$(( $x - 1 ))
意思是“减去 1x
”,那么会发生这种情况:等等
所以
x
永远满足小于或等于 5 的条件。所以你的意思是加1x
,而不是减。另一件事是你
echo
回显字符串x
,而不是值x
,所以它应该是您将看到
x
这种方式的结果(添加sleep 1
):另一件事是您在 中设置了变量
X
(大写)read
,但是您想使用(我假设)该变量,因此您的代码应为:所以,执行脚本:
您还可以使用 C 风格的
for
循环。在 bash 中看起来像:或者您可以使用
seq
: