条件测试
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,下次认真点!