一、条件测试操作
1、test命令
测试表达式是否成立,若成立返回0,否则返回其他数值
格式1: test 条件表达式
格式2: [ 条件表达式 ]
用例演示:
[root@localhost ~]# test a=a
[root@localhost ~]# echo $?
0
[root@localhost ~]# test 1=1; echo $?
0
[root@localhost ~]# test 1 = 2
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ 1 = 1 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ 1 = 2 ]
[root@localhost ~]# echo $?
1
2、文件测试
格式:[ 操作符 文件或目录 ]
常用的操作符:
-e:测试目录或文件是否存在(Exist)
-d:测试是否为目录(Directory)
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试是否设置有可执行(Excute)权限
-L:测试是否为符号链接
用例演示:
[root@localhost ~]# mkdir test
[root@localhost ~]# ls
anaconda-ks.cfg original-ks.cfg test 公共 模板 视频 图片 文档 下载 音乐 桌面
[root@localhost ~]# [ -e test ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ -f test ] //测试是否为文件
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -d test ] //测试是否为目录
[root@localhost ~]# echo $?
0
[root@localhost ~]# test -w test //测试当前用户是否有权限写入
[root@localhost ~]# echo $?
0
[root@localhost ~]# useradd zhangsan //添加张三用户
[root@localhost ~]# su zhangsan
[zhangsan@localhost root]$ test -w test //测试当前用户是否有权限写入
[zhangsan@localhost root]$ echo $?
1
3、整数值的比较
格式:[ 整数变量1 操作符 整数变量2 ]
-eq | 等于 |
-gt | 大于 |
-lt | 小于 |
-ge | 大于等于 |
-le | 小于等于 |
-ne | 不等于 |
用例演示:
[root@localhost ~]# test 100 -eq 100
[root@localhost ~]# echo $?
0
[root@localhost ~]# test 100 -eq 200 ; echo $?
1
[root@localhost ~]# test 100 -ne 200 ; echo $?
0
[root@localhost ~]# test 100 -le 200 ; echo $?
0
[root@localhost ~]# test 100 -ge 200 ; echo $?
1
[root@localhost ~]# [[ 99+1 -eq 100 ]] ; echo $?
0
[root@localhost ~]# ((99+1==100)) ; echo $?
0
[root@localhost ~]# ((99+1!=100)) ; echo $?
1
[root@localhost ~]# ((99+1!=100)) ; echo $?
1
[root@localhost ~]# [ 99 -ne 100 ] ; echo $?
0
4、字符串的比较
= | 字符串内容相同 |
!= | 字符串内容不同 |
-z | 字符串内容为空 |
-n | 字符是否存在 |
用例演示
[root@localhost ~]# a=abc
[root@localhost ~]# echo $a
abc
[root@localhost ~]# b=ab
[root@localhost ~]# echo $b
ab
[root@localhost ~]# [ -z $a ] ; echo $? //判断a是否为空
1
[root@localhost ~]# [ -z $b ] ; echo $? //判断b是否为空
1
[root@localhost ~]# [ -n $b ] ; echo $? //判断b是否存在
0
[root@localhost ~]# [ -n $a ] ; echo $? //判断a是否存在
0
[root@localhost ~]# [ -n "$c" ] ; echo $?
1
[root@localhost ~]# [[ $a = ~$b ]] ; echo $?
1
5、逻辑测试
格式1: [ 表达式1 ] 操作符 [ 表达式2 ] ...
格式2: 命令1 操作符 命令2 ...
1、[ 表达式1 ] && [ 表达式2 ] [ 表达式1 -a 表达式2 ] [[ 表达式1 && 表达式2 ]] 且,要求前后表达式条件都成立
2、[ 表达式1 ] || [ 表达式2 ] [ 表达式1 -o 表达式2 ] [[ 表达式1 || 表达式2 ]] 或,只需前后表达式条件成立一个即可3、[ 表达式1 ] || 命令1 #如果表达式1条件成立不会执行或运算符后面的命令1,如果表达式1条件不成立则会执行或运算符后面的命令1
4、[ 表达式1 ] && 命令1 || 命令2 #如果表达式1条件成立则执行命令1,如果表达式1条件不成立则命令25、[ ! 表达式1 ] #取反,如果表达式1条件成立则最终结果为条件不成立
用例演示1:
[root@localhost ~]# a=100
[root@localhost ~]# echo $a
100
[root@localhost ~]# [ $a -gt 99 ] && [ $a -eq 100 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ $a -gt 99 ] && [ $a -ne 100 ]; echo $?
1
[root@localhost ~]# [ $a -gt 99 ] || [ $a -eq 100 ]; echo $?
0
[root@localhost ~]# [ $a -gt 999 ] || [ $a -eq 100 ]; echo $?
0
[root@localhost ~]# [ $a -gt 999 ] || [ $a -eq 10 ]; echo $?
1
[root@localhost ~]# [ $a -gt 99 -a $a -ne 100] ; echo $?
bash: [: 缺少 `]'
2
[root@localhost ~]# [ $a -gt 99 -a $a -ne 100 ] ; echo $?
1
[root@localhost ~]# [ $a -gt 99 ] && echo true || echo false //三元表达式
true
[root@localhost ~]# [ $a -lt 99 ] && echo true || echo false
false
用例演示2: 查看是否能ping通,ping通返回true,否则返回false
[root@localhost ~]# vim ping.sh
[root@localhost ~]# chmod +x ping.sh //赋予可执行权限
[root@localhost ~]# vim ping.sh
[root@localhost ~]# ./ping.sh 192.168.109
192.168.109 is offline
[root@localhost ~]# ./ping.sh 192.168.108
192.168.108 is offline
用例三:
通过端口判断httpd进程是否启动,启动则输出httpd已启动,否则启动httpd
[root@localhost ~]# ss -lntp | grep :80 &> /dev/null && echo 'httpd is starting' || systemctl start httpd
[root@localhost ~]# httpd is starting
判断进程是否正在运行的方法:
- systemctl status 进程服务
- netstat -lntup | grep :端口/进程名
- ss -lntup | grep :端口/进程名
- lsof -i :端口
- ps -elf | grep 进程名 | grep -v "grep" | grep -v "$$" | wc -l
- pidof 进程名 | wc -w
- killall -0 进程名
二、if分支结构
单分支结构
用例:在系统磁盘使用率达到80%以上时,发出警报
思路:
创建脚本并写入命令,具体操作如下:
[root@localhost opt]# mkdir demo
[root@localhost opt]# cd demo/
[root@localhost demo]# vim demo.sh
[root@localhost demo]# chmod +x demo.sh
[root@localhost demo]# ./demo.sh
双分支结构
格式:
if [判断条件] ; then
条件成立的分支代码
else
条件不成立的分支代码
fi
用例:判断httpd服务是否运行,若不运行,则启动httpd
多分支结构
if [判断条件] ; then
条件成立的分支代码
elif [ 判断条件];then
条件成立后的代码
else
条件不成立的分支代码
fi
示例:
[root@localhost ~]# vim demo1.sh
[root@localhost ~]# chmod +x demo1.sh
[root@localhost ~]# ./demo1.sh
请输入你的考试分数:99
不错
示例2: 判断输入的数字是否为整数,若是整数,判断是奇数还是偶数
三、case语句
case多分支语句的语法:
case $变量 in
模式1)
命令序列
;;
模式2)
命令序列
;;
....
*)
命令序列
esac
示例: