【Shell】shell编程之条件语句

目录

一、条件测试操作

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多分支语句的语法

  • 36
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值