目录
示例1:判断当前磁盘剩余空间是否有20G,如果小于20G,则将报警邮件发送给管理员,每天检查一次磁盘剩余空间。
示例2:使用curl命令访问第三题的web服务,看能否访问,如果能正常访问,则返回web server is running; 如果不能正常访问,返回12状态码。
示例3:判web服务是否运行(1、查看进程的方式判断该程序是否运行,2、通过查看端口的方式判断该程序是否运行),如果没有运行,则启动该服务并配置防火墙规则。
1.if条件语句的语法及案例
1.1 单分支结构
第一种语法:if < 条件表达式 >then指令fi第二种语法:if < 条件表达式 >;then指令fi
示例1:判断当前磁盘剩余空间是否有20G,如果小于20G,则将报警邮件发送给管理员,每天检查一次磁盘剩余空间。
[root@manager ~]# vim test281.sh
#!/bin/bash
#
#********************************************************************
#Author: Shi
#Date: 2022-12-28
#FileName: test281.sh
#********************************************************************
# 提取磁盘剩余空间
disk_size=`df / | grep / | awk '{print $4}'`
#磁盘提取数值单位为kb
if [ "$disk_size" <= 20971520 ];then
mail -s Warning root << EOF
/ 分区容量低于 20GB,请及时处理!!!
EOF
fi
步骤二:设置脚本为可执行文件
[root@manager ~]# chmod +x /root/test281.sh
步骤三:运行检验脚本
[root@manager ~]# ./test281.sh
[root@manager ~]# ps aux |grep test281
//可以看到脚本正在后台运行
root 7944 0.0 0.0 12136 1100 pts/1 R+ 19:00 0:00 grep --color=auto test281
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令(Process Status)就是最基本同时也是非常强大的进程查看命令.
使用该命令 可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵尸、哪些进程占用了过多的资源等等.总之大部分信息都是可以通过执行该命令得到的.
如果直接用ps命令,会显示所有进程的状态,通常结合grep命令查看某进程的状态。
ps -aux输出格式:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
格式说明:
USER: 行程拥有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM: 占用的记忆体使用率
VSZ: 占用的虚拟记忆体大小
RSS: 占用的记忆体大小
TTY: 终端的次要装置号码 (minor device number of tty)
STAT: 该行程的状态,linux的进程有5种状态:
D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process
注: 其它状态还包括W(无驻留页), <(高优先级进程), N(低优先级进程), L(内存锁页).
START: 行程开始时间
TIME: 执行的时间
COMMAND:所执行的指令
示例2:使用curl命令访问第三题的web服务,看能否访问,如果能正常访问,则返回web server is running; 如果不能正常访问,返回12状态码。
步骤一:使用vim编辑test2812.sh脚本
[root@manager ~]# vim test2812.sh
#!/bin/bash
#
#********************************************************************
#Author: Shi
#Date: 2022-12-28
#FileName: test2812.sh
#********************************************************************
curl http://192.168.139.128 curl命令访问页面
if [ $? -eq 0 ];then
echo "web service is regular running"
else
exit 12 编写返回指定退出码
echo $?
fi
步骤二:使用bash运行验证脚本
#不能成功访问
[root@manager ~]# bash test2812.sh
curl: (7) Failed to connect to 192.168.139.128 port 80: Connection refused
#可以成功访问
[root@manager ~]# bash test2812.sh
this s first
web service is regular running
1.2 双分支结构
if < 条件表达式 >then指令序列 1else指令序列 2fi
示例3:判web服务是否运行(1、查看进程的方式判断该程序是否运行,2、通过查看端口的方式判断该程序是否运行),如果没有运行,则启动该服务并配置防火墙规则。
步骤一: 使用vim编辑test282.sh脚本
[root@manager ~]# vim test282.sh
#!/bin/bash
#
#********************************************************************
#Author: Shi
#Date: 2022-12-28
#FileName: test282.sh
#********************************************************************
#检查服务状态,是否安装
read -p "请输入要检测的服务:" SERVICE
netstat -anp | grep $SERVICE &> /dev/null
if [ $? -eq 0 ]
then
echo "$SERVICE服务已经启动!"
systemctl start firewalld &> /dev/null
firewalld-cmd --permanent --add-service=httpd &> /dev/null
firewalld-cmd --permanent --reload &> /dev/null
else
rpm -q $SERVICE &> /dev/null
if [ $? -eq 0 ]
then
echo "$SERVICE服务已安装,正在启动...."
service $SERVICE start
else
echo "该服务未安装!"
fi
fi
步骤二:设置脚本为可执行文件
[root@manager ~]# chmod a+rx test282.sh
步骤三:运行验证脚本
[root@manager ~]# sh test282.sh
请输入要检测的服务:dhcpd
该服务未安装!
[root@manager ~]# sh test282.sh
请输入要检测的服务:httpd
httpd服务已安装,正在启动....
Redirecting to /bin/systemctl start httpd.service
[root@manager ~]# sh test282.sh
请输入要检测的服务:httpd
httpd服务已经启动!
1.3 多分支结构
语法:
if 条件表达式1
then
命令序列1
elif 条件表达式2
then
命令序列2
elif 条件表达式3
then
命令序列3
else
命令序列n
fi在上面的语法中,当整个 if elif 语句结构中的第 1 个条件表达式为真,则执行第 1 个 then 子句中的语句statement1;否则,继续下面的判断。如果条件表达式 2 的值为真,则执行第 2 个 then 子句中的语句,以此类推。如果所有的条件表达式的值都为假,则执行最后的else 子句中的语句。最后是 if elif 结构的结束标志fi 。
示例4:两个整数比较大小。
方法1:
#使用vim编辑compare.sh脚本
[root@localhost test3]# vim compare.sh
#!/bin/bash
if [ "$1" -eq "$2" ];then
echo "$1 equal $2"
elif [ "$1" -gt "$2" ]
then
echo "$1 greater than $2"
else
echo "$1 less than $2"
fi
#将文件设置为可执行文件
[root@localhost test3]# chmod a+rx ping.sh
#运行验证脚本
[root@localhost test3]# ./compare.sh 20 20
20 equal 20
方法二:
#使用vim编辑compare1.sh脚本
[root@localhost test3]# vim compare1.sh
#!/bin/bash
read -p "please input integer:" a b
if [ "$a" -eq "$b" ];then
echo "$a equal $b"
elif [ "$a" -gt "$b" ]
then
echo "$a greater than $b"
else
echo "$a less than $b"
fi
#设置文件为可执行文件
[root@localhost test3]# chmod a+rx compare1.sh
#运行验证脚本
[root@localhost test3]# ./compare1.sh
please input integer:12 30
12 less than 30