Linux Shell 脚本题目集
1、执行 ping 命令对指定主机进行测试,以确定该主机是否处于存活状态并输出相应结果。
#!/bin/bash
read -p "请输入主机号:" pc # 读取用户输入的主机号
if [ -z "$pc" ];then # 检查用户输入是否为空
echo "主机号不能为空!"
exit 1
fi
# ping命令检查主机是否存活(发送三个ICMP请求,超时时间为3秒)
ping -c 3 -w 3 "$pc" > /dev/null
# 检查ping命令的返回值
if [ $? -eq 0 ];then
echo "$pc 存活"
else
echo "$pc 不存在或不在存活状态"
fi
测试示例:
2、验证系统中特定用户是否存在。
#!/bin/bash
read -p "请输入用户名或者用户ID号:" username # 读取用户输入的用户名或用户ID号
if [ -z $username ];then # 判断输入用户名或用户ID号是否为空
echo "请输入用户名或用户ID号!"
exit 1
fi
id $username > /dev/null 2>&1 # 检查用户是否存在
if [ $? -eq 0 ] # 检查id命令返回值
then
echo "$username用户 存在"
else
echo "$username用户 不存在"
fi
测试示例:
3、检查当前内核的主版本是否为 3 且次版本是否大于 10,并输出相应判断结果。
#!/bin/bash
zhu=$(uname -r | cut -d '.' -f1) # 内核主版本
ci=$(uname -r | cut -d '.' -f2) # 内核次版本
if [ "$zhu" -eq 3 ] # 检查主版本号是否为3
then
echo "主版本号为:3"
else
echo "主版本号为:$zhu,不为3"
fi
if [ "$ci" -gt 10 ] # 检查次版本号是否大于10
then
echo "次版本号为:$ci,大于10"
else
echo "次版本号为:$ci,不大于10"
fi
测试示例:
4、检查 nginx 服务是否正在运行,若未运行则启动 nginx 服务并设置其开机自启,同时输出相应操作信息。
#!/bin/bash
# 检查 Nginx 服务状态
systemctl status nginx >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "nginx 服务正在运行"
else
echo "nginx 服务不存在或处于关闭状态"
echo "尝试开启 nginx 服务"
# 尝试启动 Nginx 服务
if systemctl start nginx >/dev/null 2>&1; then
echo "nginx 服务开启成功"
else
echo "nginx 服务开启失败"
exit 1
fi
# 检查 Nginx 是否已经设置为开机自启
if systemctl is-enabled --quiet nginx; then
echo "nginx 服务已经是开机自启,无需设置"
else
echo "nginx 服务未设置开机自启动,正在设置开机自启"
# 尝试设置 Nginx 开机自启
if systemctl enable nginx >/dev/null 2>&1; then
echo "nginx 开机自启设置成功"
else
echo "nginx 开机自启设置失败:$(systemctl enable nginx 2>&1)"
exit 1
fi
fi
fi
测试示例:
5、编写一个函数,接收 $1 变量作为主机地址,用于判断该指定主机是否能够 ping 通并给出结果。
#!/bin/bash
# 定义函数来检查主机是否能够 ping 通
ping_host() {
local host=$1
if ping -c 2 -W 2 "$host" &> /dev/null; then
echo "主机 $host 可以 ping 通"
else
echo "主机 $host 无法 ping 通"
fi
}
# 检查是否提供了主机地址参数
if [ -z "$1" ]; then
echo "请提供一个主机地址作为参数"
exit 1
fi
# 调用函数并传递主机地址参数
ping_host "$1"
测试示例:
6、编写一个报警脚本,当满足以下条件时向指定邮箱发送告警邮件:根分区剩余空间小于 20%;内存已用空间大于 80%。并设置该脚本配合 crond 服务每 5 分钟执行一次检查,发送邮件的命令示例为 [root@locaklhost ~]# echo "邮件正文" | mail -s "邮件主题" alice。
#!/bin/bash
# 邮件接收者
email=邮箱号 # 设置为相应的邮箱号
# 检查根分区剩余空间
use1=$(df / | grep / | awk '{ print $5 }' | sed 's/%//g')
if [ "$use1" -gt 80 ]; then
echo "警告:根分区剩余空间小于 20%,已用 $use1%" | mail -s "根分区空间告警" $email
fi
# 检查内存使用情况
shu1=$(free -m | grep "Mem:" | tr -s " " | cut -d " " -f 3)
shu2=$(free -m | grep "Mem:" | tr -s " " | cut -d " " -f 2)
use2=$(echo "scale=2; ($shu1 / $shu2) * 100" | bc)
if [ $(echo "$use2 > 80" | bc) -eq 1 ]; then
echo "警告:内存已用空间大于 80%,已用 $use2%" | mail -s "内存使用告警" $email
fi
设置脚本执行权限、配置定时任务
使用crontab配置定时任务,每五分钟执行一次。
在crontab文件中添加:*/5 * * * * /root/sh/6.sh
测试示例:
7、编写一个脚本,判断用户输入的内容是否为数字,若是数字则进一步判断该数字是否大于 10 并输出结果。
#!/bin/bash
# 提示用户输入内容
echo "请输入一个数字:"
read input
# 判断输入是否为数字
if [[ $input =~ ^[0-9]+$ ]]; then
# 输入是数字
if [ $input -gt 10 ]; then
echo "输入的数字 $input 大于 10"
else
echo "输入的数字 $input 不大于 10"
fi
else
# 输入不是数字
echo "输入的内容不是一个有效的数字"
fi
测试示例:
8、编写一个脚本,用于计算用户输入的任意两个整数的和、差、乘积、商、余数。在脚本中先判断用户输入的参数数量是否为两个,如果不是则提示正确的用法;接着判断用户输入的是否为整数,如果不是则给出提示并终止脚本运行。
#!/bin/bash
# 检查参数数量是否为两个
if [ $# -ne 2 ]; then
echo "请传入两个整数参数: <整数1> <整数2>"
exit 1
fi
# 检查输入是否为整数
if ! [[ $1 =~ ^-?[0-9]+$ ]] || ! [[ $2 =~ ^-?[0-9]+$ ]]; then
echo "错误:输入的参数必须是整数"
exit 1
fi
# 获取输入的两个整数
num1=$1
num2=$2
# 检查第二个整数是否为0,避免除法和取余操作的错误
if [ $num2 -eq 0 ]; then
echo "错误:第二个整数不能为0,因为除法和取余操作无法进行"
exit 1
fi
# 计算和、差、乘积、商和余数
sum=$((num1 + num2))
diff=$((num1 - num2))
product=$((num1 * num2))
quotient=$((num1 / num2))
remainder=$((num1 % num2))
# 输出结果
echo "输入的整数为:$num1 和 $num2"
echo "和:$sum"
echo "差:$diff"
echo "乘积:$product"
echo "商:$quotient"
echo "余数:$remainder"
测试示例: