shell脚本2
- 条件测试分类
测试特定的表达式是否成立,当条件成立时,测试语句的返回值为0,否则为其他数值
测试命令格式:[ 条件表达式 ]
文件测试
格式:[ 操作符 文件或目录 ]
-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否有权限执行(eXcute)
举例:
[ -d /etc ]
echo $?
[ -f /etc ]
echo $?
[ -e /abc ]
echo $?
[ -r /etc/shadow ]
echo $?
整数值比较
-eq:等于(Equal)
-ne:不等于(Not Equal)
-gt:大于(Greater Than)
-lt:小于(Lesser Than)
-le:小于或等于(Lesser or Equal)
-ge:大于或等于(Greater or Equal)
举例:
统计当前登录用户数量是否大于5
[ $(who|wc -l) -gt 5 ]
字符串比较
格式1: [ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]
格式2: [ -z 字符串 ]
[ -z $user ]
解释:
[ -z 字符串 ]: 检查字符串是否为空
逻辑测试
-a或&&:逻辑与,“而且”的意思
-o或||:逻辑或,“或者”的意思
!:逻辑否
- 单分支语句
if 条件判断
then
命令序列
fi
举例:磁盘可用空间大于80%,告警
vim jiaoben.sh
添加:
used_rate=$(df | grep /$ | awk '{print $5}' | awk -F% '{print $1}')
if [ $used_rate -gt 80 ]
then
echo "磁盘空间不足,告告告告告告"
fi
让我逐行解释:
used_rate=$(df | grep /$ | awk '{print $5}' | awk -F% '{print $1}'):
-
- df 命令用于显示磁盘空间利用情况。
- grep /$ 用于匹配根目录(以/结尾的行),因为根目录通常是文件系统的最顶层目录。
- awk '{print $5}' 用于提取匹配行的第五列,即磁盘使用率。
- awk -F% '{print $1}' 用于去除百分号,只留下数字部分。
- 最终结果赋值给变量 used_rate。
if [ $used_rate -gt 80 ]:
-
- 这是一个条件判断语句,判断 $used_rate 是否大于80%。
- -gt 是大于的意思,80% 是判断的阈值。
then:
-
- 如果条件成立,则执行下面的命令。
echo "磁盘空间不足,告告告告告告":
-
- 如果磁盘使用率超过80%,则输出提示信息。
fi:
-
- 表示条件判断结束
- 双分支语句
if 条件判断
then
命令序列
else
命令序列
fi
举例:
httpd服务是否开启,输出相应信息,未开启时请启动,测试主机生存状态
vim jiaoben2.sh
添加:
netstat -lntp | grep httpd &> /dev/null
if [ $? -eq 0 ]
then
echo "该服务正在运行中哦"
else
echo "该服务已停止啦!"
systemctl start httpd
echo "正在帮哥哥启动服务哦"
fi
- 多分支语句
if 条件判断1
then
命令序列
elif 条件判断2
then
命令序列
elif 条件判断3
then
命令序列
else
命令序列
fi
举例:输入学生分数,输出成绩是否合格
vim jiaoben3.sh
添加:
read -p "请输入学士分数:" cj
if [ $cj -ge 90 ]
then
echo "优秀"
elif [ $cj -ge 80 ]
then
echo "良"
elif [ $cj -ge 60 ]
then
echo "及格"
else
echo "不及格"
fi
- 编写ping测试脚本
vim jiaoben4.sh
添加:
ping -c 3 -i 0.2 -w 1 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo "目标主机已经建立连接"
else
echo "目标主机已关闭"
fi
- 编写如下服务器性能监控脚本
uptime :查看系统负载
$NF:最后一列内容
Mpstat:cpu负载率
free:查看内存使用率
系统负载长期高于cpu核心数时,告警
vim jiaoben-1.sh
添加:
kernels=$(cat /proc/cpuinfo | grep processor |wc -l )
load=$(uptime | awk '{print $NF}' | awk -F. '{print $1}')
if [ $load -gt $kernels ]
then
echo "cpu快烧啦!!!"
fi
Cpu使用率大于90%时,告警
vim jiaoben-2.sh
添加:
idle=$(mpstat | grep all | awk '{print $NF}' | awk -F. '{print $1}')
if [ $idle -lt 90 ]
then
echo "Cpu使用率太高啦!"
fi
内存使用率大于90%时,告警
vim jiaoben-3.sh
添加:
used=$(free |grep Mem |awk '{print $3}')
total=$(free |grep Mem |awk '{print $2}')
used_rate=$(expr $used \* 100 / $total)
if [ $used_rate -gt 90 ]
then
echo "内存空间不足"
fi
硬盘使用率大于80%时,告警
vim jiaoben-4.sh
添加:
used_rate=$(df | grep /$ | awk '{print $5}' | awk -F% '{print $1}')
if [ $used_rate -gt 80 ]
then
echo "磁盘空间不足!"
fi