条件测试:test/[
命令test/[ 可以测试一个条件是否成立,如果测试条件为真,则该命令的ExitStatus为0,反之,ExitStatus为1。
注意:命令[ 各参数之间应该用空格隔开,以]结尾。但是 ] 不是命令。
测试命令:
[ -d dir ] :如果dir存在并且是一个目录则为真
[ -f file ]:如果file存在并且是一个普通文件则为真
[ -z string ]:如果string的长度为0则为真
[ -n string ]:如果string的长度非0则为真
[ string1 = string2 ]:如果两个字符串相同则为真
[ string != string2 ]:如果两个字符串不相同则为真
测试条件之间也可以与、或、非逻辑运算:!表示逻辑反 -a表示逻辑与 -o表示逻辑或
注意:如果上例中的_str变量事先没有定义,就会被shell展开为空字符串,则会造成测试条件的语法错误,所以应该把变量取值放在“”中。
if/then/elif/else/fi
分fi表示if语句块的结束
注意:1.如果两条命令在同一行需要用;号隔开
2.命令和各参数之间必须用空格隔开
if命令的参数组成一条子命令,如果该子命令的Exit Status为0,则执行then后面的子命令,如果Exit Status非0,则执行elif、else、或者fi后面的子命令。
: 是一个特殊的命令,称为空命令,该命令不做任何事,但Exit Status总是真。
&&相当于if...then...,||相当于if not...then...。
&&和||用于连接两个命令,-a和-o用于测试表达式中连接两个测试条件。
csae/esac
esac表示csae语句块的结束。c语言的case只能匹配整型或字符型常量表达式,shell脚本的case可以匹配字符串和Wildcard,每个分支可以有若干条命令,结尾必须;;结束,执行时找到第一个匹配的分支并执行相应的命令,然后直接跳 到esac之后,不需要像C语言一样用break跳出。
for/do/done
while/do/done