for命令
读取列表
for命令作用的命令使得可以一直重复执行一系列命令直到达到某种限定条件,具体语法如下:
for var in list
do
执行命令
done
其实这个for循环的语法和Python有很多相似的地方。语法中,list是可迭代的,var在执行循环的过程中依次代表list中的值,并且在do和done之间,可以使用var值
注意:
- 由于var会依次代表list中的值,说明var的值每经过一次循环就会变化一次,直到最后一次循环,var保存的是list的最后一个值,在这个循环结束后,这个值依然会存在,除非你去改变它
- 当在list内的字符串中使用了单引号时,需要用反斜线转义或者用另外双引号来限定
- list中,所有的值都是用空格来分割,如果有包含空格的值,需要用双引号来限定
- list中的值可以存储在一个变量中,这些值由空格分开,有双引号框起来,然后去循环遍历中的值,
实例如下:
执行结果如下:
读取命令
就是去循环遍历命令执行后的结果,实例如下:
循环遍历当前路径下的所有文件(ls),执行结果如下,结果为当前路径下的所有文件:
更改字段分隔符
在以上的讲述中,list中的值都是用空格来分隔的,其实在bash shell中,默认有三个字段分隔符:
- 空格
- 制表符
- 换行符
我们可以根据需要去改变字段分隔符。控制这个字段分隔符的是一个环境变量IFS,我们可以临时改变这个IFS的值,即用赋值语法,举例如下:
IFS=$'\n' # 以换行符为字段分隔符
IFS=: # 以冒号为字段分隔符
IFS=; # 以分号为字段分隔符
IFS=:; # 同时指定冒号和分号为分隔符
用通配符读取目录
用for遍历目录中的文件。进行此操作需要使用通配符,通配符会使得shell使用文件扩展匹配。
具体示例如下:
执行结果如下:
另外,还可以在for命令中列出多个目录通配符。
C语言风格的for命令
在shell中,除了以上讲述风格的for命令,还有C语言风格的for命令,具体示例如下:
执行结果如下:
额外的:C语言风格的for命令也允许迭代多个变量。但是只允许定义一种条件。示例如下:
执行结果如下: