条件判断

字符串判断:

[ ] -注意,中括号内部参数的两侧距离中括号都要有空格

[ string1 == string2 ] 表示判断两个字符串是否相同

[root@leopard test]# [ uplook == uplook ]
[root@leopard test]# echo $?
0
[root@leopard test]# [ uplook == uplooking ]
[root@leopard test]# echo $?
1

[ string1 != string2 ] 表示判断两个字符串是否不相同

[root@leopard test]# [ uplook == uplooking ]
[root@leopard test]# echo $?
1
[root@leopard test]# [ uplook != uplooking ]
[root@leopard test]# echo $?
0

[ string ] 判断字符串是否不为空

[root@leopard test]# [ uplook ]
[root@leopard test]# echo $?
0
[root@leopard test]# [ ]
[root@leopard test]# echo $?
1

[ -z string ] 判断字符串长度是否为零

[root@leopard test]# [ -z  ]
[root@leopard test]# echo $?
0
[root@leopard test]# [ -z uplook ]
[root@leopard test]# echo $?
1

[ -n string ] 判断字符串长度是否不为零

vim /test/test.sh
STR4=
     [ -n "$STR4" ]                                             --注意引用空的变量加上双引号
       echo $?
       echo $STR4
-a [ expr1 -a expr2 ] –两个条件都要成立
-o [ expr1 -o expr2 ] –两个条件成立一个就行

! [ ! expr ] –取反


整数判断,两值比较:

[ arg1 OP arg2 ] –OP is one of -eq, -ne, -lt, -le, -gt, or -ge.

-eq equal == # 等于
-ne not equal != # 不等于
-lt less than < # 小于
-le less and equal <= # 小于或等于
-gt greater than > # 大于
-ge greater and equal >= # 大于或等于

文件的判断:

-a file 如果文件存在,那么为真
-b file 文件存在,并且是块设备文件
-c file 文件存在,并且是字符设备文件
-d file 文件存在,并且是目录文件
-e file 文件存在,为真
-f file 文件存在,为普通文件
-g file 文件存在,并且设置了SGID权限
-h file 文件存在,并且是符号链接文件
-k file 文件存在,并且设置了粘贴位
-p file 文件存在,并且是管道文件
-r file 文件存在,如果可读,为真
-s file 文件存在,如果文件大小大于零,为真
-t fd # fd 是否是个和终端相连的打开的文件描述符(fd 默认为 1)
-u file 文件存在,并且设置SUID
-w file 文件存在,并且可写
-x file 文件存在,并且可执行
-O file 文件存在,并且这个文件是被用户有效id所拥有的
-G file 文件存在,并且这个文件是被用户的有效Gid所拥有的
-L file 文件存在,并且是符号链接文件
-S file 文件存在,是socket文件
-N file 文件存在,从上一次被读之后,被修改过

[[ ]] –双方括号(double brackets) 支持正则的条件判断,也称模式匹配

[[ patten1 &&p atten2 ]]
if [[ xyz =~ x[a|y]z ]]
then
    echo "It is same"
else
    echo "not same"
fi
或
$STR=xyz
if [[ "$STR" =~ x[a|y]z ]]

then
    echo "It is same"
else
    echo "not same"
fi