带有变量的bash降序循环

9
$ cat fromhere.sh
#!/bin/bash

FROMHERE=10

for i in $(seq $FROMHERE 1)
do
echo $i
done
$ sh fromhere.sh
$ 

为什么它不起作用?
我在谷歌上搜索降序循环的示例,甚至没有变量的示例。为什么?

4个回答

22

你应该使用seq指定增量:

seq $FROMHERE -1 1

18

Bash有一个for循环的语法来实现这个目的。不必使用外部的seq效用程序。

#!/bin/bash

FROMHERE=10

for ((i=FROMHERE; i>=1; i--))
do
    echo $i
done

4

如果您需要进行Shell算术运算,建议使用Bash内置的算术运算而不是外部命令seq:

i=10
while (( i >= 1 )); do
    echo $(( i-- ))
done

1
@marco:但是在Bash中,你不能在大括号范围表达式中使用变量。 - Dennis Williamson

4

使用for循环向下执行(停止播放)

for ((q=500;q>0;q--));do echo $q ---\>\ `date +%H:%M:%S`;sleep 1;done && pkill mplayer

500 ---> 18:04:02
499 ---> 18:04:03
498 ---> 18:04:04
497 ---> 18:04:05
496 ---> 18:04:06
495 ---> 18:04:07
...
...
...
5 ---> 18:12:20
4 ---> 18:12:21
3 ---> 18:12:22
2 ---> 18:12:23
1 ---> 18:12:24

模式:

for (( ... )); do ... ; done

例子

for ((i=10;i>=0;i--)); do echo $i ; done

结果

10
9
8
7
6
5
4
3
2
1
0

使用while循环:

第一步

AAA=10

那么

while ((AAA>=0));do echo $((AAA--));sleep 1;done

或者:将 "AAA--" 转换为 while。
while (( $((AAA-- >= 0)) ));do echo $AAA;sleep 1;done

"sleep 1"不是必要的


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接