流程控制 "if" 表达式 如果条件为真则执行 then 后面的部分: if ....; then
....
elif ....; then
....
else
....
fi
条件判断用 "[ " + 条件 + " ]" 来括住条件:注意这里的空格很重要。要确保方括号的空格。
1)字符串判断
if [ $str1 = $str2 ] = :当两个串有相同内容、长度时为真 ( 用"==" 与 "=" 是一样的意思)
if [ $str1 != $str2 ] != :当串str1和str2不等时为真
if [ -n $str1 ] -n :当串的长度大于0时为真(串非空)
if [ -z $str1 ] -z :当串的长度为0时为真(空串)
if [ $str1 ] 当串str1为非空时为真
2)数字判断
if [ $int1 -eq $int2 ] -eq:两数相等为真
if [ $int1 -ne $int2 ] -ne:两数不等为真
if [ $int1 -gt $int2 ] -gt:int1大于int2为真
if [ $int1 -ge $int2 ] -ge:int1大于等于int2为真
if [ $int1 -lt $int2 ] -lt:int1小于int2为真
if [ $int1 -le $int2 ] -le:int1小于等于int2为真
3)文件判断
-w file 用户可写为真
-x file 用户可执行为真
-f file 文件为正规文件为真
-d file 文件为目录为真
-c file 文件为字符特殊文件为真
-b file 文件为块特殊文件为真
-s file 文件大小非0时为真
-t file 当文件描述符(默认为1)指定的设备为终端时为真
-r file 用户可读为真
[ -f "somefile" ] :判断是否是一个文件
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
[ -n "$var" ] :判断$var变量是否有值
[ "$a" = "$b" ] :判断$a和$b是否相等
3)复合条件逻辑判断
if [ $str -a "$a" = "$b" ] -a 位与:当串str1为非空时为真 且 $a 与 $b 相等
if [ $int1 -eq $int2 -o -f "somefile" ] -o 位或:两整数相等,或 文件存在
if [ !$str ] ! 位非:串str1为非空为真,取反
对于不含变量的任务简单shell脚本一般能胜任。但在执行一些决策任务时,就需要包含if/then的条件判断了。shell脚本编程支持此类运算,包括比较运算、判断文件是否存在等。基本的if条件命令选项有: -eq —比较两个参数是否相等(例如,if [ 2 –eq 5 ])
-ne —比较两个参数是否不相等
-lt —参数1是否小于参数2
-le —参数1是否小于等于参数2
-gt —参数1是否大于参数2
-ge —参数1是否大于等于参数2
-f — 检查某文件是否存在(例如,if [ -f "filename" ])
-d — 检查目录是否存在
几乎所有的判断都可以用这些比较运算符实现。脚本中常用-f命令选项在执行某一文件之前检查它是否存在。
##################################################################
1)判断表达式
if test (表达式为真)
if test !表达式为假
test 表达式1 -a 表达式2 两个表达式都为真
test 表达式1 -o 表达式2 两个表达式有一个为真
2)判断字符串
test -n 字符串 字符串的长度非零
test -z 字符串 字符串的长度为零
test 字符串1=字符串2 字符串相等
test 字符串1 != 字符串2 字符串不等
3)判断整数
test 整数1 -eq 整数2 整数相等
test 整数1 -ge 整数2 整数1大于等于整数2
test 整数1 -gt 整数2 整数1大于整数2
test 整数1 -le 整数2 整数1小于等于整数2
test 整数1 -lt 整数2 整数1小于整数2
test 整数1 -ne 整数2 整数1不等于整数2
4)判断文件
test File1 -ef File2 两个文件具有同样的设备号和i结点号
test File1 -nt File2 文件1比文件2 新
test File1 -ot File2 文件1比文件2 旧
test -b File 文件存在并且是块设备文件
test -c File 文件存在并且是字符设备文件
test -d File 文件存在并且是目录
test -e File 文件存在
test -f File 文件存在并且是正规文件
test -g File 文件存在并且是设置了组ID
test -G File 文件存在并且属于有效组ID
test -h File 文件存在并且是一个符号链接(同-L)
test -k File 文件存在并且设置了sticky位
test -b File 文件存在并且是块设备文件
test -L File 文件存在并且是一个符号链接(同-h)
test -o File 文件存在并且属于有效用户ID
test -p File 文件存在并且是一个命名管道
test -r File 文件存在并且可读
test -s File 文件存在并且是一个套接字
test -t FD 文件描述符是在一个终端打开的
test -u File 文件存在并且设置了它的set-user-id位
test -w File 文件存在并且可写
test -x File 文件存在并且可执行