有时候,我们需要把几条命令按顺序结合成一个序列。比如说在执行某个语句前要满足几个不同的条件。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
}
阅读(1676) | 评论(0) | 转发(0) |