shell 第五章练习题

在红帽环境下使用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"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值