bash脚本的几个循环写法

Prolouge

bash脚本里的循环写法其实也就三种,分别是for,whileuntil

对于某些需要重复执行的命令来说,其仅仅是一些参数有着区别,其他的命令大体是相同的,比如有一只摸鱼怪跳了出来并表示自己是一条鱼,然后这只摸鱼怪被抓到了锅里做成了水煮鱼

echo "im fish">pot

好的,现在我们有水煮鱼吃了,但是好巧不巧又跳出来十只摸鱼怪,每个人都表示自己是一条鱼,现在家(bash)里出现了十条鱼

im fish  0
im fish  1
im fish  2
im fish  3
im fish  4
im fish  5
im fish  6
im fish  7
im fish  8
im fish  9
im fish  10

难道我们需要手动运行上面的echo十次,一只一只把鱼抓回来么,当然不用。

for 命令

‘普通'的for命令

for命令允许我们创建一个遍历一系列值的循环。每次循环都使用其中一个值来执行已经定义好的一组命令。命令格式如下:

for var in list
do
    commands
done

每次循环会顺序地从list中取出一个值赋给varvar可以以$var的形式取其中的值,遍历完list中的所有元素后跳出for循环
循环体则是do和done之间地部分,可以填入各种标准shell语句,当然也可以填入另一个循环。
list的形式则有如下两种,一种使用大括号扩起,或者使用空格分隔

var1 var2 var3 var4 var5 var6 var7
或
${var1,var2,var3,var4,var5,var6,var7}

好巧不巧输入的数据中含有空格时,可以将带空格的数据使用"扩起

另外 list位置也可以填入一条输出命令的语句,即

for var in $(commands)

有点像管道,commands给出一个列表并被循环使用

如果是数字的话,还可以考虑如下写法

(digit1..digit2)

上面的式子代表[digit1,digit2]中的每一个整数

那么抓摸鱼怪就很方便了

(base) ➜  scripts for var in {1,2,3,4,5,6,7,8,9}
do
echo "im fish $var">>pot
done

文件中的内容如下:

im fish 1
im fish 2
im fish 3
im fish 4
im fish 5
im fish 6
im fish 7
im fish 8
im fish 9

具有C风格的for命令

bash中有一种循环方式具有类似C的循环风格(之前"普通"的循环则更类似于迭代器)

for((i=dig1;i<=dig2;modify i))
do
    do something
done

基本就是c中那味,当然,既然是c中内味就说明其实还能多写点东西,比如多写两个变量

for((a=1,b=10;a<=10;a++,b--))
do
    echo “$a:$b"
done

但是条件还是只能定义一种条件

while

while test command
do
    do something
done

test command和bash中if-else定义的test command是完全一样的,也可以使用任何普通的bash命令,只要状态码不发生变换,循环就会被一直执行下去。而且test command其实可以写多行,只有最后一个测试命令会拿来决定是否退出循环,最后一个命令之前的测试命令都会被忠实地执行。

until

基本和while一样,连循环体都长得一样

until test command
do
    do something
done

你可能感兴趣的:(bash脚本的几个循环写法)