目录
一、条件测试操作
1.test命令
2.文件测试
3.整数值比较
4.字符串比较
5.逻辑测试
二、if语句的结构
1.单分支结构
2.双分支结构
3.多分支结构
三、case语句
总结
一、条件测试操作
1.test命令
测试表达式是否成立,若成立返回0,否则返回其他数值
格式1:test 条件表达式
格式2:[条件表达式] #方括号“[”或“]”与条件表达式之间需要至少一个空格进行分隔
#格式1:test 条件表达式
[root@localhost ~]# test a = a
[root@localhost ~]# echo $?
0
[root@localhost ~]# test a = b
[root@localhost ~]# echo $?
1
[root@localhost ~]#
#格式2:[条件表达式]
[root@localhost ~]# [ 1 = 1 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ 1 = 2 ]
[root@localhost ~]# echo $?
1
[root@localhost ~]#
2.文件测试
格式:[ 操作符 文件或目录 ]
常用的操作符
选项 | 含义 |
-e | 测试目录或文件是否存在(Exist) |
-d | 测试是否为目录(Directory) |
-f | 测试是否为文件(File) |
-r | 测试当前用户是否有权限读取(Read) |
-w | 测试当前用户是否有权限写入(Write) |
-x | 测试是否设置有可执行(Excute)权限 |
-L | 测试是否为符号链接 |
#测试目录或文件是否存在
[root@localhost ~]# ls
test.sh
[root@localhost ~]# test -e test.sh #测试目录或文件是否存在
[root@localhost ~]# echo $?
0
[root@localhost ~]# test -e test10.sh
[root@localhost ~]# echo $?
1
[root@localhost ~]#
#测试链接符号是否存在
[root@localhost ~]# test -L test.sh
[root@localhost ~]# echo $?
1
[root@localhost ~]# ln -s test.sh test.lnk
[root@localhost ~]# test -L test.lnk
[root@localhost ~]# echo $?
0
[root@localhost ~]#
3.整数值比较
格式:[ 整数变量1 操作符 整数变量2 ]
常用的操作符
选项 | 含义 |
-eq | 等于 == |
-ne | 不等于 != |
-gt | 大于 \> |
-lt | 小于 \< |
-le | 小于等于 |
-ge | 大于等于 |
[root@localhost ~]# test 100 -eq 100
[root@localhost ~]# echo $?
0
[root@localhost ~]# test 100 -eq 200
[root@localhost ~]# echo $?
1
[root@localhost ~]# test 100 -ne 200
[root@localhost ~]# echo $?
0
[root@localhost ~]# test 100 -le 200
[root@localhost ~]# echo $?
0
[root@localhost ~]# test 100 -ge 200
[root@localhost ~]# echo $?
1
[root@localhost ~]#
[root@localhost ~]# [ 100 -ge 200 ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ 100 -le 200 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]#
[root@localhost ~]# [[ 99+1 -eq 100 ]]
[root@localhost ~]# echo $?
0
[root@localhost ~]# echo $((99+1))
100
4.字符串比较
格式1:
[ 字符串1 = 字符串2 ] 或 [[ 字符串1 == 字符串2 ]] #相同
[ 字符串1 != 字符串2 ] 或 [[ 字符串1 != 字符串2 ]] #不相同
[[ 字符串1 =~ 字符串2 ]] #包含
[root@localhost ~]# [ "abc" = "123" ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ "abc" = "abc" ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# a=abc
[root@localhost ~]# echo $?
0
[root@localhost ~]# echo $a
abc
[root@localhost ~]#
#包含
[root@localhost ~]# [[ "abc" =~ "a" ]]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [[ "abc" =~ "1" ]]
[root@localhost ~]# echo $?
1
[root@localhost ~]#
格式2:
[ -z "字符串" ] #检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串
[ -n "字符串" ] #检查是否有字符串存在
注意:引号的使用,这是防止空格扰乱代码的好方法
[root@localhost ~]# echo $a
abc
[root@localhost ~]# [ -z $a ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# echo $b
[root@localhost ~]# [ -z $b]
[root@localhost ~]# echo $?
0
[root@localhost ~]#
5.逻辑测试
格式1:[ 表达式1 ] 操作符 [ 表达式2 ]
格式2:命令1 操作符 命令2
常用的操作符
-a或&& | 逻辑与,“而且”的意思,前后条件需都成立 |
-o或|| | 逻辑或,“或者”的意思,只需前后条件中一个成立 |
! | 逻辑否 |
#“而且”的意思,前后条件需都成立
[root@localhost ~]# a=100
[root@localhost ~]# [ $a -gt 99 ] && [ $a -eq 100 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ $a -gt 99 ] && [ $a -ne 100 ]
[root@localhost ~]# echo $?
1
[root@localhost ~]#
#逻辑否
[root@localhost ~]# [ 100 -gt 99 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ ! 100 -gt 99 ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ 100 -lt 99 ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ ! 100 -lt 99 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]#
#且和或的效果
[root@localhost ~]# [ $a -gt 99 -a $a -eq 100 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ $a -gt 99 -o $a -eq 100 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]#
补充知识
[表达式1] 命令1 || 命令2 #如果表达式1条件成立不会执行或运算符后面的命令1,如果表达式1条件不成立则会执行或运算符后面的命令1
[表达式1] && 命令1 || 命令2 #如果表达式1条件成立则执行命令1,如果表达式1条件不成立则命令2
[root@localhost ~]# echo $a
100
[root@localhost ~]# [ $a -gt 99 ] && echo true || echo false #如果表达式条件成立则执行命令ture,如果表达式1条件不成立则命令false
true
[root@localhost ~]#
案例
探测ip是否在线
[root@localhostopt]# ping -c 4 -i 0.5 -w 2 192.168.10.120 &> /dev/null
[root@localhost optl# echo $?
0
[root@localhostl# ping -c 4 -i 0.5 -w 2 192.168.10.120 $> /dev/null && echo "it is online" || echo "it is offline"
it is onlineit
[root@localhost]# ping -c 4 -i 0.5 -w 2 192.168.10.120 $> /dev/null && echo "it is online" || echo "it is offline"
it is offline
[root@localhost]#vim ping.sh
[root@localhost]# vim ping.sh
[root@localhost]# chmod +x ping.sh
[root@localhost]# ./ping.sh 192.168.10.120
探测服务是否启动
二、if语句的结构
1.单分支结构
if 已用磁盘空间>80%
then 报警
fi
[root@localhost ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
devtmpfs 1913504 0 1913504 0% /dev
tmpfs 1930628 0 1930628 0% /dev/shm
tmpfs 1930628 12532 1918096 1% /run
tmpfs 1930628 0 1930628 0% /sys/fs/cgroup
/dev/mapper/centos-root 36805060 9639268 27165792 27% /
/dev/sda1 1038336 191284 847052 19% /boot
tmpfs 386128 0 386128 0% /run/user/0
tmpfs 386128 12 386116 1% /run/user/42
/dev/sr0 4635056 4635056 0 100% /mnt
[root@localhost ~]# df | grep -w /
/dev/mapper/centos-root 36805060 9639248 27165812 27% /
[root@localhost ~]# df | grep -w / | awk '{print $2}'
36805060
[root@localhost ~]# df | grep -w / | awk '{print $3}'
9639248
[root@localhost ~]# total=$(df | grep -w / | awk '{print $2}')
[root@localhost ~]# used=$(df | grep -w / | awk '{print $3}')
[root@localhost ~]# echo $total
36805060
[root@localhost ~]# echo $used
9639472
[root@localhost ~]# echo "scale=2;${used}/${total}" | bc
.26
[root@localhost ~]# echo "scale=2;${used}/${total}*100" | bc
26.00
[root@localhost ~]# echo "scale=2;${used}/${total}*100" | bc | awk -F. '{print $1}' 26
[root@localhost ~]#
shell脚本
2.双分支结构
[root@localhost]# vim demo2.sh
[root@localhost]#chmod +x demo2.sh
[root@localhost]#./demo2.sh
网站服务已在运行!
3.多分支结构
[root@localhost]# vim demo3.sh
[root@localhost]# chmod +x demo3.sh
[root@localhost]#./demo3.sh
请输入你的考试分数:88
soso,错题罚抄20遍!
[root@localhost]# ./demo3.sh
请输入你的考试分数:99
秀儿,错题罚抄10遍!
[root@localhost]#/demo3.sh
请输入你的考试分数:100
恭喜!今晚吃鸡!
[root@localhost]#
三、case语句
总结
条件测试的语法
文件测试、整数值比较、字符串比较、逻辑测试
if条件语句的语法
单分支、双分支、多分支
case多分支语句的语法