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