Chinaunix首页 | 论坛 | 博客
  • 博客访问: 966456
  • 博文数量: 184
  • 博客积分: 10030
  • 博客等级: 上将
  • 技术积分: 1532
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-27 18:32
文章分类

全部博文(184)

文章存档

2009年(1)

2008年(63)

2007年(39)

2006年(79)

2005年(2)

我的朋友

分类:

2006-01-03 08:54:19

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"
 foo=$(($foo+1))
done
这个例子比前面的那个for语句看起来更简洁.
阅读(2247) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~