欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > Linux Shell 脚本题目集(2)

Linux Shell 脚本题目集(2)

2025/5/22 9:07:31 来源:https://blog.csdn.net/2301_78538021/article/details/144156422  浏览:    关键词:Linux Shell 脚本题目集(2)

1、使用 case 语句根据用户输入的分数(0-100)输出相应的成绩等级(A, B, C, D)。

#! /bin/bashread -p "请输入您的分数(0-100):" score# 验证输入是否为数字且在0到100之间
if ! [[ "$score" =~ ^[0-9]+$ ]] || [ "$score" -lt 0 ] || [ "$score" -gt 100 ]; thenecho "请输入0-100之间的有效分数!"exit 1
ficase "$score" in8[5-9]|9[0-9]|100)   # 85-100为Aecho "A";;7[0-9]|8[0-4])       # 70-84为Becho "B";;6[0-9])              # 60-69为Cecho "C";;*)echo "D"           # 其他(0-60)为D;;
esac

测试示例:

2、使用 for 循环批量创建20个用户。用户前缀和初始密码由用户输入,用户名格式为 前缀01 到 前缀20,并为每个用户设置相同的初始密码。输出每个用户的创建结果。 

#! /bin/bash# 获取用户输入的前缀和初始密码
read -p "请输入用户前缀:" prefix
read -s -p  "请输入用户初始密码:" passwordecho "正在为您循环创建20个用户..."# 循环创建20个用户
for i in $(seq -w 1 20)
dousername="${prefix}${i}"if useradd "$username";then               # 创建用户echo "$username:$password" | chpasswd   # 设置用户密码echo "用户 $username 已创建并设置了初始密码。"elseecho "创建用户 $username 失败。"fi 
done

测试示例:

3、批量 Ping 测试并记录在线和离线主机

要求

  1. 用户输入

    • 输入网段前缀(如 192.168.2)。
    • 输入 Ping 测试的起始和结束 IP 地址范围(如 10 到 20)。
  2. Ping 测试

    • 根据用户输入生成完整的 IP 地址列表。
    • 对每个 IP 地址进行 Ping 测试,判断主机是否在线。
  3. 记录结果

    • 在线主机的 IP 地址记录到 /tmp/host_up.txt
    • 离线主机的 IP 地址记录到 /tmp/host_down.txt
#! /bin/bashread -p "请输入网段前缀(如:192.168.2):" prefix
echo "请输入测试的IP范围(0-255之间)"while true
doread -p "起始IP地址(如:10):" startread -p "结束IP地址(如:20):" end# 检查输入是否为数字,并且在有效范围内if [[ "$start$end" =~ ^[0-9]+$ ]] && [ "$start" -ge 0 ] &&  [ "$start" -le 255 ] && [ "$end" -le 255 ] && [ "$end" -ge "$start" ]thenbreakelseecho "起始IP或结束IP输入有误!"echo "请输入有效的起始和结束IP(0-255),且起始IP不大于结束IP。"fi
done# 输出文件
up_file="/tmp/host_up.txt"
down_file="/tmp/host_down.txt"# 创建或清空输出文件
> "$up_file"
> "$down_file"for i in $(seq "$start" "$end")   # 循环测试
do ip="${prefix}.${i}"ping -c 2 -w 2 "$ip" &> /dev/nullif [ $? -eq 0 ];thenecho "$ip" >> "$up_file"echo "主机 $ip 在线"elseecho "$ip" >> "$down_file"echo "主机 $ip 离线"fi 
doneecho  "测试完毕,结果已保存到 $up_file 和 $down_file"

测试示例:

4、批量修改远程主机 root 密码

要求:

  1. 使用 for 循环:读取 hosts.txt 文件中的主机 IP,依次连接并修改 root 密码。
  2. 记录结果:无论成功或失败,详细记录到 password_change.log,包括时间戳、IP 地址和错误信息。
  3. SSH 公钥认证
    • 生成 SSH 密钥对(如 ed25519)。
    • 使用 ssh-copy-id 分发公钥到远程主机。

 在管理主机上生成SSH密钥对

 分发公钥到远程主机

 分发给远程主机192.168.108.131

  分发给远程主机192.168.108.133

创建主机IP文件hosts.txt

 批量修改密码脚本

#!/bin/bash# 定义日志文件路径
LOG_FILE="password_change.log"# 清空日志文件
> $LOG_FILE# 提示用户输入新密码
echo "请输入新的 root 密码:"
read -s -p "密码: " new_password
echo
read -s -p "确认密码: " confirm_password
echo# 检查两次输入的密码是否一致
if [ "$new_password" != "$confirm_password" ]; thenecho "密码不匹配。退出脚本。"exit 1
fi# 检查密码是否为空
if [ -z "$new_password" ]; thenecho "密码不能为空。退出脚本。"exit 1
fi# 读取主机列表文件并使用 for 循环处理每个主机
for host in $(cat hosts.txt); doecho "正在处理主机: $host" | tee -a $LOG_FILE# 尝试通过 SSH 执行远程命令修改密码if ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@$host "echo 'root:$new_password' | chpasswd"; thenecho "[$(date +'%Y-%m-%d %H:%M:%S')] 密码修改成功:$host" | tee -a $LOG_FILEelseecho "[$(date +'%Y-%m-%d %H:%M:%S')] 密码修改失败:$host" | tee -a $LOG_FILEecho "错误详情:" | tee -a $LOG_FILE# 记录详细的错误信息ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@$host "echo 'root:$new_password' | chpasswd" 2>&1 | tee -a $LOG_FILEfiecho "----------------------------------------" | tee -a $LOG_FILE
done

测试示例:

查看日志文件:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词