在红帽环境下使用shell脚本完成一下练习:
1、判断当前磁盘剩余空间是否有20G,如果小于20G,则将报警邮件发送给管理员,每天检查一次磁盘
剩余空间。
2、判断当前执行脚本的用户是不是普通用户,如果不是普通用户,提示需要用普通用户的身份执行。
3、判断web服务是否运行(1、查看进程的方式判断该程序是否运行,2、通过查看端口的方式判断该程
序是否运行),如果没有运行,则启动该服务并配置防火墙规则。
4、使用curl命令访问第三题的web服务,看能否正常访问,如果能正常访问,则返回web server is
running;如果不能正常访问,返回12状态码。
5、使用case实现成绩优良差的判断。
6. for创建20个用户,用户前缀由用户输入,用户初始密码由用户输入。
例如:test01,test10。
7. 用for通过ping测试指定网段的主机,网段由用户输入,例如用户输入192.168.2 ,则ping
192.168.2.10 --- 192.168.2.20
将能够访问的主机的主机名写入/tmp/host_up.txt,将无法访问的主机主机名写
入/tmp/host_down.txt。
第一题
#!/bin/bash
# 设置阈值
THRESHOLD=20000 # 20GB = 20000MB
# 获取当前磁盘剩余空间(单位:MB)
DISK_SPACE=$(df / | grep -v Filesystem | awk '{print $4}')
# 如果磁盘空间小于阈值,则发送邮件报警
if [ "$DISK_SPACE" -lt "$THRESHOLD" ]; then
# 设置邮件相关信息
SUBJECT="磁盘空间报警"
TO="admin@example.com"
BODY="警告: 服务器的磁盘剩余空间小于 20GB,当前剩余空间为 ${DISK_SPACE}MB。"
# 发送邮件
echo "$BODY" | mail -s "$SUBJECT" "$TO"
fi
第二题
#!/bin/bash
# 1. 判断当前执行脚本的用户是不是普通用户
if [ "$(id -u)" -eq 0 ]; then
echo "请使用普通用户身份执行该脚本!"
exit 1
fi
第三题
# 2. 判断web服务是否运行
# 方法1:通过查看进程判断
WEB_SERVICE="nginx" # 假设我们检查的是nginx服务
if ! pgrep -x "$WEB_SERVICE" > /dev/null; then
echo "$WEB_SERVICE 服务未运行,正在启动..."
# 启动web服务
sudo systemctl start $WEB_SERVICE
# 配置防火墙规则,假设服务监听80端口
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --reload
else
echo "$WEB_SERVICE 服务已经在运行。"
fi
# 方法2:通过查看端口判断
PORT=80
if ! nc -zv 127.0.0.1 $PORT &> /dev/null; then
echo "$WEB_SERVICE 服务未在端口 $PORT 上运行,正在启动..."
sudo systemctl start $WEB_SERVICE
sudo firewall-cmd --zone=public --add-port=$PORT/tcp --permanent
sudo firewall-cmd --reload
else
echo "$WEB_SERVICE 服务在端口 $PORT 上运行。"
fi
第四题
# 3. 使用curl命令访问web服务,检查是否能访问
if curl -s http://127.0.0.1:$PORT > /dev/null; then
echo "web server is running"
else
echo "web server is down, returning 12 status code"
exit 12
fi
第五题
# 4. 使用case语句实现成绩优良差的判断
read -p "请输入成绩: " grade
case $grade in
[9][0-9]|100)
echo "成绩优秀"
;;
[7-8][0-9])
echo "成绩良好"
;;
[6][0-9])
echo "成绩及格"
;;
*)
echo "成绩不及格"
;;
esac
第六题
# 5. 使用for创建20个用户,用户前缀由用户输入,用户初始密码由用户输入
read -p "请输入用户前缀: " test
read -sp "请输入用户初始密码: " password
echo
for i in {1..20}; do
user=$test$(printf "%02d" $i)
sudo useradd -m $user
echo "$user:$password" | sudo chpasswd
echo "用户 $user 已创建并设置初始密码。"
done
第七题
# 6. 用for通过ping测试指定网段的主机
read -p "请输入网段(例如:192.168.2): " subnet
for i in {10..20}; do
ip="$subnet.$i"
ping -c 1 -W 1 $ip &> /dev/null
if [ $? -eq 0 ]; then
echo "$ip 是可达的" >> /tmp/host_up.txt
else
echo "$ip 无法访问" >> /tmp/host_down.txt
fi
done
echo "ping测试完成,结果已写入 /tmp/host_up.txt 和 /tmp/host_down.txt"