Linux Shell编程4 2011-07-19 18:24 For循环for…in…do…done In后面的变量时迭代变量,每次执行时迭代变量都会选用表达式list中的列出的不同单词。for循环结构与C语言中有所不同,在BASH中for循环的基本结构是: for var in [list] do #code block done 其中$var是循环控制变量,[list]是var需要遍历的一个集合,do/done对包含了循环体,相当于C语言中的一对大括号。另外如果do和for被写在同一行,必须在do前面加上“;”。如:for $var in [list]; do 例1: #!/bin/bash fordayin Sun Mon Tue Wed Thu Fri Sat do echo $day done 例2:如果列表被包含在一对双引号中,则被认为是一个元素 #!/bin/bash fordayin "Sun Mon Tue Wed Thu Fri Sat“ do echo $day done 例3: #!/bin/bash for FILE in $* do if[ -e $FILE ] then chmod 600 $FILE else echo “The file $FILE does not exist.” fi done 产生迭代列表的常用工具 for i in $* 脚本的命令行参数 for I in /etc/*.conf 与表达式/etc/*.conf相配的文件 for I in $(command) command命令的输出 例4: #!/bin/bash forDIR in $* do if [ -d $DIR ] then if [ “$DIR” == “.” –o “$DIR” == “..” ] then echo “skipping directory $DIR” else tar czvf $DIR.tgz $DIR && rm –rf $DIR fi else echo “skipping non directory $DIR” fi done while循环while循环的基本结构是: while [ condition ] do #code block done until循环的基本结构是: until [ condition ] do #code block done while和until的区别在于while是为真时执行,until是为假时执行 Case语句 BASH中的case结构与C语言中的switch语句的功能比较类似,可以用于进行多项分支控制。 case "$var" in condition1 ) ;; condition2 ) ;; * ) default statments;; esac 例1: #!/bin/bash echo "Hit a key, then hit return." read Keypress//read内置命令可以从键盘(“标准输入“)读取输入 case "$Keypress" in [A-Z] ) echo " Uppercase letter";; [a-z] ) echo " Lowercase letter";; [0-9] ) echo "Digit";; * ) echo "Punctuation, whitespace, or other";; esac