shell编程条件语句

条件测试

test命令        是一个内嵌

格式1:test 条件表达式

Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0(真true)时表示成功,返回值为非0值(假false)时表示失败或异

[root@localhost ~]# test 1>2
[root@localhost ~]# $?
bash: 1: 未找到命令...
[root@localhost ~]# echo $?
127

当使用echo ¥?的时候返回结果不为零皆为异常

格式2:【    条件表达式   】

中括号里面一定两边一定要有空格

文件测试:
格式:【 选项 文件或目录 】

文件测试常用选项

-e:测试目录或文件是否存在

-d:测试是否为目录

-f:测试是否为文件

-r:测试当前用户是否有权限读

-w:测试当前用户是否有权限写

-x:测试是否设置有可执行权限

-L:测试是否为软链接


整数值比较

格式 【整数变量1 操作符 整数变量2 】

常用操作符:

-eq 表示等于        ==

-ne 表示不等于        !=

-gt 表示大于                    \>

-lt 表示小于                    \<

-le 表示小于等于

-ge 表示大于等于

常用操作符可用使用> + - =来表示

当想在中括号里面整数变量进行加减等操作的时候一定要加两个括号

字符串比较

格式1:[ ”字符串1“ = ”字符串2“ ] 或 [[ ”字符串1“ == ”字符串2“ ]]    #相同
             [ “字符串1” != “字符串2” ] 或 [[ “字符串1” != “字符串2” ]]   #不相同

字符串判断要加上双引号

格式2:

[  -z  "字符串" ]        #-z表示检测字符串是否为空

[  -n  "字符串" ]        #-n表示检查是否有字符串存在

逻辑测试:

格式:【表达式1】 操作符 【表达式2】

常用测试操作符

-a或&&:逻辑与 ,而且的意思        前面条件都要成立

-o或||:逻辑或的意思                 只要有一条成立即可

-!:表示取反 成立变成不成立 不成立变成成立

【表达式1 】 || 命令1        #如果表达式1条件成立不会执行或运算符后面的命令如果前面的表达式1不成立 则执行后面的命令1

【 表达式1 】 && 命令1 || 命令2 #如果前面的表达式1成立运行命令1        如果前面的表达式1不成立 则会运行表达式2

注意 要是使用-a或者-o的时候表达式只能用一个括号

if语句

单分支结构

我们根据上图做一个实验

[root@localhost ~]# cd /opt/
[root@localhost opt]# df
文件系统                   1K-块    已用     可用 已用% 挂载点
devtmpfs                 1913548       0  1913548    0% /dev
tmpfs                    1930624       0  1930624    0% /dev/shm
tmpfs                    1930624   21004  1909620    2% /run
tmpfs                    1930624       0  1930624    0% /sys/fs/cgroup
/dev/mapper/centos-root 38815216 4563564 34251652   12% /
/dev/sda1                1038336  191084   847252   19% /boot
/dev/mapper/centos-home 18950144   33100 18917044    1% /home
tmpfs                     386128      68   386060    1% /run/user/0
/dev/sr0                 4635056 4635056        0  100% /mnt

先查看磁盘使用空间 

[root@localhost opt]# df | grep -w /
/dev/mapper/centos-root 38815216 4563564 34251652   12% /
    

第二个字段代表总大小
第三个字段代表已用大小
第四个字段代表可用大小

然后用df查看一下根目录的使用情况

[root@localhost opt]# df | grep -w / |awk '{print $2}'
38815216

¥2表示查看/目录的第二个字段

[root@localhost opt]# df | grep -w / |awk '{print $3}'
4563572

表示查看/目录的第三个字段

我们那上面两个字段的相除就得到了商 也就是已使用

[root@localhost opt]# total=$(df | grep -w / | awk '{print $2}' )    #表示获取总大小

[root@localhost opt]# used=$(df | grep -w / | awk '{print $3}')     #表示已用大小
然后求商
[root@localhost opt]# echo "scale=2;${used}/${total}" | bc
.11    #scale=2 表示保留小数点后两位
因为是小数点两位 
[root@localhost opt]# echo "scale=2;${used}/${total}*100" | bc
11.00
然后求整数
[root@localhost opt]# echo "scale=2;${used}/${total}*100" | bc | awk -F. '{print $1}'
11




然后大体框架就这样 这时候我们创建一个以.sh为结尾的脚本进行编译


[root@localhost opt]# mkdir ren

[root@localhost opt]# cd ren/
[root@localhost ren]# vim ren.sh

#!/bin/bash

#总磁空间大小
total=$df | grep -w / |awk '{print $2}'
#已使用的磁盘空间大小
used=$(df | grep -w / | awk '{print $3}')
#磁盘使用率百分比
precent=$(echo "scale=2;${used}/${total}*100" | bc | awk -F. {print $1}')

if [ $precent -gt 10 ]
        then
        echo "警报!当前磁盘使用已超过80%! 使用率为${percent}%"
fi
~

双分支结构:

[root@localhost opt]# vim demo1.sh        #先创建一个.sh脚本

#!/bin/bash

losf -i :80 &> /dev/null
#判断eq是否为0
if [ $? -eq 0 ]
        then
        echo "网站服务已在运行!"
        else
        echo "正在启动网站服务...."
#启动服务
        systemctl start httpd
fi

[root@localhost opt]# ./demo1.sh
正在启动网站服务....

多分枝结构:

[root@localhost opt]# vim demo2.sh
#!/bin/bash

read -p "请输入分数; " score

if [ $score -eq 90 ]
        then echo "恭喜你分数很高! "
elif [ $score -ge 90 -a $score -lt 100 ]
        then echo "加油! 继续努力! "
elif [ $score -ge 70 -a $score -le 89 ]
        then echo "soso, 加油! "
else
        echo "再接再厉! "
fi
~
~#当上面所有条件都执行不了的时候就直接执行else这条
[root@localhost opt]# chmod +x demo2.sh
[root@localhost opt]# ./demo2.sh
请输入分数; 89
soso, 加油!
[root@localhost opt]# ./demo2.sh
请输入分数; 60
再接再厉!
[root@localhost opt]# ./demo2.sh
请输入分数; 20
再接再厉!
[root@localhost opt]# ./demo2.sh
请输入分数; 70
soso, 加油!

判断一个数字是否为整数 如果是整数在判断是奇数还是偶数

[root@localhost opt]# vim demo3.sh


#!/bin/bash
#需求:判断输入的数字 是否为整数 如果整数在判断是奇数还是偶数
read -p "请输入一个数字: " NUM
#整数%1为0      非整数则不为0
INT=$(echo "$NUM % 1" | bc)
#判断是否为整数
if [ "$INT" == "0" ];then
        echo "$NUM 为整数"
#判断是否为0
        if  [ $a -eq 0 ];then
       echo “0不是奇数也不是偶数”
        else
        a=$[NUM %2]
#判断除以2的余数是否为0 0为偶数 不为则为奇数
        if [ $a -eq 0 ];then
        echo "$NUM 为偶数"
else
        echo "$NUM 为奇数"
        fi
        fi
else
        echo "${NUM}不为整数"
fi

[root@localhost opt]# chmod +x demo3.sh    #给权限
[root@localhost opt]# ./demo3.sh
请输入一个数字: 90
90 为整数
90 为偶数
注意这里0既不是偶数也不是奇数所以添加一条命令

case语句

通配符 * ? 【a-z A-Z】



[root@localhost opt]# vim demo4.sh


#!/bin/bash

read -p "请输入你的分数; "      score
case $score in
100)
        echo "继续保持!"
        ;;
9[0-9])
        echo "下次努力! "
        ;;
[7,8][0-9])
        echo "soso,下次认真点! "
        ;;
[0,9]|[1-6][0-9])
        echo "再接再厉多复习! "
        ;;
*)
        echo "输入错误! "
esac

[root@localhost opt]# chmod +x demo4.sh
[root@localhost opt]# ./demo4.sh
请输入你的分数; 60
再接再厉多复习!
[root@localhost opt]# ./demo4.sh
请输入你的分数; 70
soso,下次认真点!
[root@localhost opt]# ./demo4.sh
请输入你的分数; 8
输入错误!
[root@localhost opt]# ./demo4.sh
请输入你的分数; 80
soso,下次认真点!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值