1、语法形式(三种)。
[root@docker01 ~]# test 1 -eq 1
[root@docker01 ~]# echo $?
0
[root@docker01 ~]# test 1 -eq 11
[root@docker01 ~]# echo $?
1
[root@docker01 ~]# [ 1 -eq 1 ]
[root@docker01 ~]# echo $?
0
[root@docker01 ~]# [ 2 -eq 1 ]
[root@docker01 ~]# echo $?
1
[root@docker01 ~]# [[ 1 -eq 1 ]]
[root@docker01 ~]# echo $?
0
[root@docker01 ~]# [[ 1 -eq 112 ]]
[root@docker01 ~]# echo $?
1
注意:上面三种方式,效果等价。
[] 和 [[]] 的区别在于
单个 [ ] 使用字符串对字符串必须加双引号
两个 [[ ]] 不用对字符串变量加双引号
两个 [[ ]] 里面可以使用 &&,||, 而单个不行
两个 [[ ]] 支持c风格
两个 [[ ]] 支持正则
注意:在(( ))中,=表示赋值;==表示判断
[root@server ~]# ((1==2));echo $?
[root@server ~]# ((1<2));echo $?
[root@server ~]# ((2>=1));echo $?
[root@server ~]# ((2!=1));echo $?
[root@server ~]# ((`id -u`==0));echo $?
[root@server ~]# ((a=123));echo $a
[root@server ~]# unset a
[root@server ~]# ((a==123));echo $?
2、使用判断的常用场景。
判断参数 |
含义 |
-eq == |
相等 |
-ne <> != |
不等 |
-gt |
大于 |
-lt |
小于 |
-ge |
大于等于 |
-le |
小于等于 |
判断参数 |
含义 |
-z |
判断是否为空字符串,字符串长度为0则成立 |
-n |
判断是否为非空字符串,字符串长度不为0则成立 |
string1 = string2 |
判断字符串是否相等 |
string1 != string2 |
判断字符串是否相不等 |
判断参数 |
含义 |
说明 |
-e |
判断文件是否存在(link文件指向的也必须存在) |
exists |
-f |
判断文件是否存在并且是一个普通文件 |
file |
-d |
判断文件是否存在并且是一个目录 |
directory |
-L |
判断文件是否存在并且是一个软连接文件 |
soft link |
-b |
判断文件是否存在并且是一个块设备文件 |
block |
-S |
判断文件是否存在并且是一个套接字文件 |
socket |
-c |
判断文件是否存在并且是一个字符设备文件 |
char |
-p |
判断文件是否存在并且是一个命名管道文件 |
pipe |
-s |
判断文件是否存在并且是一个非空文件(有内容) |
is not empty |
判断参数 |
含义 |
说明 |
-s |
判断文件是否存在并且是一个非空文件(有内容) |
is not empty |
判断参数 |
含义 |
-r |
当前用户对其是否可读 |
-w |
当前用户对其是否可写 |
-x |
当前用户对其是否可执行 |
-u |
是否有suid,高级权限冒险位 |
-g |
是否sgid,高级权限强制位 |
-k |
是否有t位,高级权限粘滞位 (创建者/root才能删除) |
- 文件新旧判断
常用参数:
说明:这里的新旧指的是文件的修改时间。
判断参数 |
含义 |
file1 -nt file2 |
比较file1是否比file2新 |
file1 -ot file2 |
比较file1是否比file2旧 |
file1 -ef file2 |
比较是否为同一个文件,或者用于判断硬连接,是否指向同一个inode |
3、简单应用。
#!/bin/env bash
read -p "请输入网址:" addr;
wget -T 2 -t 2 -P ./tmp_files $addr &>/dev/null;
if [ $? -eq 0 ];then
echo "网址[$addr]可以正常访问";
rm -f ./tmp_files/index.*
else
echo "网址[$addr]不可以访问";
fi
补充:
if
中使用判断,还有个缺省模式,不使用test、[]、[[]]
可以直接对命令的执行结果进行判断。
if ls ;then echo 1111; fi;