for循环的运作方式,是将 串行 的元素的元素一一取出,依序放入制定的变量中,然后重复执行含括的命令区域(在 do 与 done 之间),直到所有元素取尽为止。
其中,串行是一些字符串的组合,彼此用 $IFS 所定义的 分隔符(如空格符)隔开,这些字符串称为字段。
for的语法结构如下:
for 变量 in 串行
do
命令区域
done
举例:
for i in 1 2 3 4 do echo $i done
for循环的语法中,“in串行”这段可以省略不写,此时,Bash会由命令行读取各个参数,轮循代入变量中,作用同以下用法:
for 变量 in $@ do 命令区域 done
$@ 代表命令行所有的参数。
for循环经常用在分割字符串行,取出字段元素值。
IFS=':' PL="root:x:0:0:root:/root:/bin/Bash" for f in $PL do echo $f done
比较经典的做法是取出 CSV 文件各行的字段。CSV文件是一种用,(逗号)分隔数据字段的纯文本文件,适合担任数据库之间汇入、导出数据的中介。
取出CSV文件各行字段的做法如下:
#!/bin/bash declare -i i=0 for line in $(cat cvsfile.txt) do i=i+1 echo -n "第 $i 行的字段有:" save_ifs=$IFS IFS=',' for f in $line do echo -n $f ' ' done IFS=$save_ifs echo done
for循环也经常用在处理目录中的文件:
#!/bin/bash DIR="/root" for f in $(ls $DIR) do echo '文件:' $f done
列出 /root 目录下的文件,但不包括隐藏文件。
再看一个例子:
#!/bin/bash DIR="/var" cd $DIR for f in $(ls $DIR) do [ -d $f ] && du -s $f done
这个程序用来列出 /var 目录下各个子目录占用的磁盘空间大小。
for 的另一种用法:
for ((初始条件; 终止条件; 异动项))
do
命令区域
done
举例:
#!/bin/bash declare -i i sum for ((i=1; i<=10; i=i+1)) do let sum+=i done echo $sum
for 无穷循环:
for ((;1;)) do 命令区域 done
要想中断无穷循环,得键入 Ctrl + C。