1、语法形式(三种)。

  • test 表达式
    案例演示:
[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风格
两个 [[ ]] 支持正则

  • 类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;
Logo

更多推荐