while 循环
while循环的逻辑:
while [ 条件测试 ]
do
做某些事
done
也可以这样:
while [ 条件测试 ];do
做某些事
done
例子:
#!/bin/bash
while [ -z $response ] || [ $response != 'yes' ]
do
read -p 'say yes:' response
done
若输入的字符串不是 “yes” 或者没有输入任何字符,程序会一直请求。
until 循环
例:
#!/bin/bash
until [ "$response" = 'yes' ]
do
read -p 'say yes:' response
done
运行结果和上述while循环的例子一样。
for 循环
遍历列表
for循环可以遍历一个“取值列表”,基本的逻辑如下:
for 变量 in '值1' '值2' ... '值n'
do
做某些事
done
例:
#!/bin/bash
for animal in 'dog' 'cat' 'pig'
do
echo "animal being analyzed:$animal"
done
for 循环的取值列表不一定要在代码中定义好,也可以用一个变量,如:
#!/bin/bash
for file in `ls`
do
echo "file found:$file"
done
改进:当复制当前目录下以所有以.sh
结尾的文件,并且把每个副本的名字修改为“现有名字 + ‘-copy’”的格式。
#!/bin/bash
for file in `ls *.sh`
do
cp $file $file-copy
done
更常规的for循环
借助seq命令,实现类似主流编程语言中的for循环用法。
seq是sequence的缩写。
例:
#!/bin/bash
for i in `seq 1 10`
do
echo $i
done
seq 1 10
会返回一个取值列表,从1到10的整数值,echo会遍历输出1到10这10个整数。
可以修改默认的取值间隔(1),如下:
#!/bin/bash
for i in `seq 1 2 10`
do
echo $i
done
seq 1 2 10
会返回一个取值列表,从1到10的整数值,取值间隔是2,输出1,3,5,7,9五个整数。