Shell 有一系列控制结构,而且它们同样与其他程序设计语言很相似. 就某些结构而言,Shell的功能更强大(比如CASE语句).
1. if语句
它对某命令进行测试,然后根据结果执行一组语句. 例如:
#!/bin/sh
echo "Is it morning? Please answer yes or no"
read time
if [ "$time" = "yes" ]; then
echo "Good morning"
elif [ "$time" = "no" ]; then
echo "Good afternoon"
else
echo "Sorry,$time not recquired,Enter yes or no"
exit 1
fi
exit 0
2. for语句
用for结构来循环处理一组值,这组值可以是任意字符串的集合.在程序里可以简单的把全体字符串都列出来,更常见的做法是把它与Shell对文件名的通配符扩展结合在一起使用.
for variable in vlaues
do
statements
done
下面的例子使用固定字符串的for循环.
#!/bin/sh
for foo in 1 2 3 4 5 6 7 8 9
do
echo $foo
done
exit 0
注意如果字符串之间如果有空格的话,要在两边加上引号,这样Shell把引号之间的东西都看做是一个字符串,这也是字符串里保留空格的唯一方法.
例如: name="RedHat Linux"
-------------
使用通配符扩展的for循环
for循环经常与Shell对文件名的通配符扩展一起使用.即在字符串的值里加上个通配符,由Shell在程序执行时填充所有的值. 例如
#!/bin/sh
for file in $(ls *.sh); do
lpr $file
done
exit 0
这个例子把当前目录里的.sh的文件都打印出来.
3. while语句
语法如下:
while condition do
statements
done
下面这个例子是个口令检查程序:
#!/bin/sh
echo "Enter password"
read trypwd
while [ "$trypwd" != "secret" ]; do
echo "Sorry,try again"
read trypwd
done
注意: "$(( ))"结构是最先出现在KSH里的一个用法,后来被包括在X/Open技术规范里,早期的Shell要用expr来代替它,但这样做比较慢,并会占用更多的资源. 所以只要有可能,应该使用命令的"$(( ))" 格式. 例如:
#!/bin/sh
foo=1
while [ $foo -le 9 ]
do
echo "Now foo is $foo"
这个例子比前面的那个for语句看起来更简洁.
阅读(2277) | 评论(0) | 转发(0) |