Shell脚本的条件测试

来源:互联网 发布:js中的target属性 编辑:程序博客网 时间:2024/06/05 19:32

1、判断命令:test/[命令
test和[可以测试一个条件是否成立,。如果测试结果为真,则该命令的输出状态为0;如果测试结果为假,则该命令的输出状态为1(这与C语言的逻辑关系正好相反)。命令test和[的参数形式是相同的,参数之间要用空格隔开,只不过test命令不需要]参数。
【例】比较两个数
这里写图片描述

2、命令测试
1)[ -d DIR ]:如果DIR存在并且是一个目录则为真。
2)[ -f FILE ]:如果FILE存在且是一个普通文件则为真。
【例】
这里写图片描述

3)[ -z STRING ]:如果STRING的长度为零则为真。
4)[ -n STRING ]:如果STRING的长度为非零则为真。
【例】
这里写图片描述

5)[ STRING1 = STRING2 ]:如果两个字符串相同则为真。
6)[ STRING1 != STRING2 ]:如果两个字符串不相同则为真。
【例】
这里写图片描述

3、测试条件:
1)比较:
[ARG1 OP ARG2]:ARG1和ARG2是整数或者取值为整数的变量。OP表示-eq(等于)、-ne(不等于)、-It(小于)、-Ie(小于等于)、-gt(大于)、-ge(大于等于)。
2)“与、或、非”逻辑运算:
EXPR表示任意一种测试条件。
[!EXPR]:!表示逻辑反。
[EXPR1 -a EXPR2]:-a表示逻辑与。
[EXPR1 -o EXPR2]:-o表示逻辑或。
【例1】
这里写图片描述

【例2】
这里写图片描述

4、if/then/elif/else/fi
如果两条命令写在同一行则需要用“;”号隔开,命令和各参数之间必须用空格隔开。if命令的参数组成一条子命令,如果该子命令的输出状态为0(表示真),则执行then后面的子命令;如果为假(输出状态为非0),则执行elif、else或者fi后面的子命令。if后面的子命令通常是测试命令,但也可以是其它命令。Shell脚本没有{}括号,所以用fi表示if语句块的结束。
【例1】
这里写图片描述
注:“:”是一个特殊的命令,称为空命令,该命令不做任何事,但是输出状态总是真。

【例2】
这里写图片描述
注:read命令的作用是等待用户输入一行字符串,将该字符串存到一个shell变量中。

5、&&与||
&&相当于“if …then…”,而||相当于“if not…then…”。&&和||用于连接两个命令,而-a和-o仅用于在测试表达式中连接两个测试条件。
【例1】
这里写图片描述

【例2】
这里写图片描述

6、case/esac
Shell中的case命令可类比C语言的switch/case语句。C语言的case只能匹配整型或字符型常量表达式,而shell脚本的case可以匹配字符串和Wildcard(通配符)。每个匹配分支可以有若干条命令,末尾必须以“;;”结束。执行时找到第一个匹配的分支并执行相应的命令,然后直接跳到esac后面,不需要像C语言一样用break跳出。
【例】
这里写图片描述