第一种:
if test判断;then
如果test判断为真[返回值为0],则执行该命令
fi
第二种:
if test判断;then
如果test判断为真[返回值为0],则执行该命令
else
如果test判断为假[返回值为1],则执行该命令
fi
第三种:
if test判断1;then
如果test判断1为真[返回值为0],则执行该命令
elif test判断2;then
如果test判断2为真[返回值为0],则执行该命令
else
如果test判断1,2都为假[返回值为1],则执行该命令
fi
举例:
用户输入成绩,判断成绩对应等级
# vim if.sh
#! /bin/bash
read -p "请输入你的成绩:" num
if [[ $num =~ ^[0-9]+$ ]];then
:
else
echo "请输入纯数字"
exit 10
fi
if [ $num -ge 90 ];then
echo "$num成绩优秀"
elif [ $num -ge 80 ];then
echo "$num成绩良好"
elif [ $num -ge 60 ];then
echo "$num成绩及格"
elif [ $num -lt 60 ];then
echo "$num不及格"
else
echo "请输入0-100的纯数字"
fi
=========================================
多条件联合
逻辑与
if [ $condition1 ] && [ $condition2 ]
if [ $condition -a $condition2 ]
if [[ $condition1 && $condition2 ]]
例如:
if [ $num -ge 90 ] && [ $num -le 100 ];then
echo "$num成绩优秀"
elif [ $num -ge 80 ] && [ $num -lt 90 ];then
echo "$num成绩良好"
elif [ $num -ge 60 ] && [ $num -lt 80 ];then
echo "$num成绩及格"
elif [ $num -lt 60 ];then
echo "$num不及格"
else
echo "请输入0-100的纯数字"
fi
逻辑或
if [ $condition1 ] || [ $condition2 ]
if [ $condition -o $condition2 ]
if [[ $condition1 || $condition2 ]]
总结:逻辑与需要满足两个条件,逻辑或需要满足其中一个条件
检查nginx启动情况:
# vim nginx.sh
#! /bin/bash
systemctl status nginx &> /dev/null
if [ $? -eq 0 ];then
echo "nginx 正在运行"
else
echo "正在启动中。。。"
systemctl start nginx &> /dev/null && echo "nginx已经启动成功并且正在运行" || echo "nginx 启动失败"
fi
命令排序执行
; && ||
cmd1;cmd2 cmd1执行完成,就执行cmd2
cmd1&&cmd2 cmd1执行成功,才执行cmd2
cmd1||cmd2 cmd1执行失败,才执行cmd2
作业1:ping主机测试
# vim ping.sh
#!/usr/bin/env bash
read -p "请输入主机名或者ip地址: " host
# -c 3 ping3次,-W 1 超过1秒没ping通,认为超时失败
ping -c 1 -W 1 $host &> /dev/null
if [ $? -eq 0 ];then
echo "$host 能ping通"
else
echo "$host 不能ping通"
fi
运用文件测试和字符串比较和数字比较
# vim ping.sh
#! /bin/bash
read -p "请输入主机名或者IP地址:" IP
ping -c 3 -W 1 $IP &> /dev/null
#if [ -z "$IP" ];then
# echo "请输入正确的主机名或者IP地址"
# exit 111
#
#fi
a=/root
# if [ -z "$IP" ]
if [ -f "$a" ];then
if [ $? -eq 0 ];then
echo "$IP 可以ping通"
else
echo "$IP 不可以ping通"
fi
else
echo "请输入正确的主机名或者IP地址"
fi
=============
作业2:判断一个用户是否存在
# vim user.sh
#! /usr/bin/env bash
id $1 &> /dev/null
if [ $? -eq 0 ];then
echo "用户 $1 已存在"
else
echo "用户 $1 不存在"
fi
=====================
作业3:判断软件包是否安装,如果没有则自动安装
# vim package.sh
#!/usr/bin/env bash
read -p "请输入服务名称:" package
rpm -q $package &> /dev/null
if [ $? -eq 0 ];then
echo "$package 已经安装"
else
yum -y install $package &> /dev/null
if [ $? -eq 0 ];then
:
else
curl -o /etc/yum.repos.d/Centos-7.repo https://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum -y install $package
fi
fi
=================
作业4:判断用户输入的是否是纯数字
# vim num.sh
#! /bin/bash
read -p "请输入纯数字:" num
if [[ $num =~ ^[0-9]+$ ]];then
echo "$num 是纯数字"
else
echo "$num 不是纯数字"
exit 222
fi
扩展:判断学生的成绩等级
# vim a.sh
#! /usr/bin/env bash
read -p "请输入你的成绩:" num
if [[ $num =~ ^[0-9]+$ ]];then
:
else
echo "$num 不是纯数字,请重新输入"
exit 10
fi
if [ $num -ge 90 ] && [ $num -le 100 ];then
echo "$num 成绩优秀"
elif [ $num -ge 80 ] && [ $num -lt 90 ];then
echo "$num 成绩良好"
elif [ $num -ge 60 ] && [ $num -lt 80 ];then
echo "$num 成绩合格,继续努力"
elif [ $num -ge 0 ] && [ $num -lt 60 ];then
echo "$num 成绩不合格!!!!"
else
echo "请输入0-100的数字"
===========
作业5:报警脚本,要求如下:
根分区剩余空间小于20%
内存已用空间大于80%
配合crond每5分钟检查一次,如果出现问题,将问题内容写入/tmp/gaojing.txt
# vim disk_free.sh
#!/usr/bin/env bash
disk_use=`df -TH | awk '/\/$/{print $6}' | awk -F% '{print $1}'`
free_total=`free -m |awk '/^Mem/{print $2}'`
free_use=`free -m |awk '/^Mem/{print $3}'`
free_per=$[$free_use*100/$free_total]
if [ $disk_use -gt 80 ] || [ $free_per -gt 80 ];then
date >> /tmp/gaojing.txt
echo "叼毛赶紧处理,机器要出问题了!!!!" >> /tmp/gaojing.txt
echo "磁盘使用率${disk_use}% 内存使用率${free_per}%" >> /tmp/gaojing.txt
else
:
fi
free | awk 'NR==2 {printf "%.0f", $3/$2 * 100}'
free -m | awk 'NR==2{print $3/$2*100}' | cut -d'.' -f1
free -m | awk 'NR==2{print $3/$2*100}' | awk -F. '{print $1}'
# crontab -e
*/5 * * * * /bin/bash /script/disk_free.sh
在shell里面涉及变量相除等于小数,最好先乘再除,因为在shell里面除法不能直接获取小数
例如:
free_per=$[$free_use*100/$free_total]