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

全部博文(184)

文章存档

2009年(1)

2008年(63)

2007年(39)

2006年(79)

2005年(2)

我的朋友

分类:

2006-01-05 15:27:16

有时候,我们需要把几条命令按顺序结合成一个序列。比如说在执行某个语句前要满足几个不同的条件。Shell为这类命令表构造准备了两种结构,它们分别是AND命令表和OR命令表,两者通常会接合使用。
(1) AND 命令表
AND命令表结构允许我们按这样的方式执行一连串的命令: 只有在前面所有的命令都执行成功的情况下才执行后一条命令. 它的语法是:
statement1 && statement2 && statement3 && ...
从左开始顺序执行每条命令,如果它返回的是true,它右边的下条命令才能被执行.此循环直到有一条命令返回false,或命令表中的全部命令都执行完毕. "&&"的作用是检查前一条命令的返回条件.每条语句的执行都是彼此独立的,这就允许我们把许多不同的命令混合在一个命令表里.做为一个整体,如果AND命令表的所有命令都执行成功,就算它执行成功;否则它就是失败的.
下面这个脚本里,touch命令用来检查file1文件是否存在,如果不存在就建立它,并用rm -f删除file2文件,然后用AND命令表检查各个文件是否存在并通过echo命令给出相应的指示.
#!/bin/sh
touch file1
rm -f file2
if [ -f file1 ] && echo"hello" && [ -f file2 ] && echo "there"
then
  echo "in if"
else
  echo "in else"
fi
exit 0
 
(2) OR 命令表
OR命令表结构允许我们持续执行一系列命令直到有一条成功为止,其后的命令将不再执行.语法如下:
statement1 || statement2 || statement3 || ...
从左开始顺序执行每条命令. 如果它返回的是false,它右边的下一条命令才能够被执行. 如此循环直到有一条命令返回true,或者命令表中的全部命令都执行完毕.
 
AND 和 OR 这2个命令表类型结构与C语言中对多个条件进行测试的执行情况是相似的.只需执行最少的语句几可以确定返回结果,而对返回结构没有影响的语句是不会被执行到的.这种情况通常被称为"短路径求值".
有时候这两种结构组合在一起的结果会很好,比如:
[ -f file1 ] && command for ture || command for false
 
 
-------------------------------------------
*语句块*
如果想在某些只允许使用单个语句的地方(比如AND或OR命令表里)使用多条语句,可以把它们括在花括号{} 里构造出一个语句块. 比如:
[ test_statement ] && {
command_a
command_b
command_c
}
阅读(1651) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~