不灭的焱

革命尚未成功,同志仍须努力

作者:php-note.com  发布于:2013-10-04 22:28  分类:Linux基础  编辑

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。