本章结构
- 条件测试
文件测试与整数测试
字符串测与逻辑测试 - if语句
if单分支语句
if双分支语句
if多分支语句 - case分支语句
条件测试操作
- test命令
测试表达式是否成立,若成立返回0,否则返回其他数值
格式1:test 条件表达式
格式2:[ 条件表达式 ] 注 :至少要有一个空格 - 文件测试
[ 操作符 文件或目录 ] - 常用的测试操作符
[root@localhost~]#[ -d /media/cdrom ]
[root@localhost~]#echo $?
0 返回0表示条件成立
[root@localhost~]#[ -d /media/cdrom/Server ]
[root@localhost~]#echo $?
1 返回1表示条件不成立
[root@localhost~]#[ -d /media/cdrom ]&& echo "YES"
YES &&表示而且的意思
- 整数值比较
[ 整数1 操作符 整数2 ] - 字符串比较
格式1:
[ 字符串1 == 字符2 ]
[ 字符串1 != 字符2 ]
格式2:
[ -z 字符串 ]
例:
[root@localhost ~]# test a == b
[root@localhost ~]# echo $?
1
[root@localhost ~]# test a != b
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ a == b ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ a != b ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ a == b ] && echo y || echo n
n
[root@localhost ~]# [ a != b ] && echo y || echo n
y
[root@localhost ~]#
&& :有“与”和“并且”的意思 ,当前面条件满足的时候,后面的才会执行
|| : 有“非”和“或”的意思, 当前面的条件不满足时候,后面的才会执行
[root@localhost ~]# [ a == b ];echo y
y
[root@localhost ~]# [ a != b ];echo y
y 其中 “;”作用:前后没有关系,不相互影响
[root@localhost ~]# a=wang
[root@localhost ~]#
[root@localhost ~]# [ -z $a ] && echo y || echo n
n -z :检测字符段是否为控制
[root@localhost ~]# [ -n $a ] && echo y || echo n
y -n :检测字符段是否为非空值
注:其中空格也属于空值
整数值比较
整数值比较指的是根据给定的两个整数值,判断第一个数与第二 个数的关系, 如是否大于、等于、小于第二个数,实际应用非常广泛
例如用来判断已登录用户数量、开启进程数、磁盘使用率是否超标,以及软件版本号是否符合要求等
操作选项:
-eq: 第-一个数等于(Equal) 第二个数。
-ne: 第一一个数不等于(Not Equal) 第二个数。
-gt: 第一个数大于(Greater Than) 第二-个数。
-|t:第一一个数小于(Lesser Than)第二个数。
-le: 第-个数小于或等于(Lesser or Equal) 第二个数。
-ge: 第一一个数大于或等于(Greater or Equal) 第二个数
例:
[root@localhost ~]# [ 3 -eq 6 ] && echo y || echo n
n
[root@localhost ~]# [ 3 -eq 3 ] && echo y || echo n
y
[root@localhost ~]# [ 3 -ne 3 ] && echo y || echo n
n
[root@localhost ~]# [ 3 -lt 3 ] && echo y || echo n
n
[root@localhost ~]# [ 3 -gt 3 ] && echo y || echo n
n
[root@localhost ~]# [ 3 -ge 3 } && echo y || echo n
-bash: [: 缺少 `]'
n
[root@localhost ~]# [ 3 -ge 3 ] && echo y || echo n
y
[root@localhost ~]# [ 3 -le 3 ] && echo y || echo n
y
[root@localhost ~]# [ $UID -le 3 ] && echo y || echo n
y 其中UID为0
文件测试
文件测试指的是根据给定的路径名称,判断对应的是文件还是目录,或者判断文件是否存在,是否可读、可写、可执行等选项:
-d: 测试是否为目录(Directory)
-e: 测试目录或文件是否存在(Exist)
-f: 测试是否为文件(File)
-L: 测试是否为链接文件
-b:测试是否为设备文件
-c:测试是否为字符设备文件
-r:测试当前用户是否有权限读取(Read) 。
-w:测试当前用户是否有权限写入(Write)
-x: 测试是否设置有可执行(Excute) 权限
-s:测试存在且文件大小为空
例:
[root@localhost ~]# [ -d /etc/file ] && echo y || echo n
n
[root@localhost ~]# [ -e /etc/file ] && echo y || echo n
n
[root@localhost ~]# [ -e /etc/ ] && echo y || echo n
y
[root@localhost ~]# [ -f /etc/ ] && echo y || echo n
n
[root@localhost ~]# [ -d /xxx/ ] && echo y || echo n
n
[root@localhost ~]# [ -r /etc/ ] && echo y || echo n
y
[root@localhost ~]# [ -x /etc/ ] && echo y || echo n
y
[root@localhost ~]# [ -w /etc/ ] && echo y || echo n
y
[root@localhost ~]# [ 3 -gt 2 -a 3 -gt 1 ] && echo y || echo n
y 其中-a 是且
[root@localhost ~]# [ 3 -gt 2 -o 3 -gt 1 ] && echo y || echo n
y 其中-o 是或
[root@localhost ~]# [ 3 -lt 2 ] || [ 3 -gt 1 ] && echo y || echo n
y
[root@localhost ~]# [[ 3 -lt 2 || 3 -gt 1 ]] && echo y || echo n
y 当|| 放在前面的时候表示或的意思,只需要满足一个条件就可以输出
[root@localhost ~]# [[ 3 -lt 2 && 3 -gt 1 ]] && echo y || echo n
n 当&& 放在前面的时候表示且的意思,需要同时满足两个条件
- 逻辑测试
格式1: [ 表达式1 ] 操作符 [ 表达式2 ] …
格式2 : 命令1 操作符 命令2 .。 - 常用的测试操作符
-a或&& :逻辑与, “而且”的意思
-o或|| :逻辑或,“或者”的意思
!;逻辑否
if语句的结构
- 单分支结构
if 条件测试操作
then 命令序列
fi 结束
if 已用磁盘空间> 80%
then 报警
fi
例:
编辑vim
检测shell脚本是否成立
- 双分支结构
if 条件测试操作
then 命令序列1
else 命令序列2
fi
if 80端口是否监听
then 网站服务已在运行
else 启动http服务
fi
- 多分支结构
if 条件测试操作1
then 命令序列1
elif 条件测试2
then 命令序列2
else
命令序列3
fi
例:
if 分数为85~100之间
then 判为优秀
elif 分数为70~84之间
then 判为合格
esle
判为不合格
fi
case语句结构
- case多分支结构
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
......
*)
默认命令序列
esac
例:
case 分数 in
85~100)
判为优秀
;;
70~84)
判为合格
;;
......
*)
判为不合格
esac