1、使用 case 语句根据用户输入的分数(0-100)输出相应的成绩等级(A, B, C, D)。
#! /bin/bash
read -p "请输入您的分数(0-100):" score
# 验证输入是否为数字且在0到100之间
if ! [[ "$score" =~ ^[0-9]+$ ]] || [ "$score" -lt 0 ] || [ "$score" -gt 100 ]; then
echo "请输入0-100之间的有效分数!"
exit 1
fi
case "$score" in
8[5-9]|9[0-9]|100) # 85-100为A
echo "A"
;;
7[0-9]|8[0-4]) # 70-84为B
echo "B"
;;
6[0-9]) # 60-69为C
echo "C"
;;
*)
echo "D" # 其他(0-60)为D
;;
esac
测试示例:
2、使用 for 循环批量创建20个用户。用户前缀和初始密码由用户输入,用户名格式为 前缀01 到 前缀20,并为每个用户设置相同的初始密码。输出每个用户的创建结果。
#! /bin/bash
# 获取用户输入的前缀和初始密码
read -p "请输入用户前缀:" prefix
read -s -p "请输入用户初始密码:" password
echo "正在为您循环创建20个用户..."
# 循环创建20个用户
for i in $(seq -w 1 20)
do
username="${prefix}${i}"
if useradd "$username";then # 创建用户
echo "$username:$password" | chpasswd # 设置用户密码
echo "用户 $username 已创建并设置了初始密码。"
else
echo "创建用户 $username 失败。"
fi
done
测试示例:
3、批量 Ping 测试并记录在线和离线主机
要求
-
用户输入:
- 输入网段前缀(如
192.168.2
)。 - 输入 Ping 测试的起始和结束 IP 地址范围(如
10
到20
)。
- 输入网段前缀(如
-
Ping 测试:
- 根据用户输入生成完整的 IP 地址列表。
- 对每个 IP 地址进行 Ping 测试,判断主机是否在线。
-
记录结果:
- 在线主机的 IP 地址记录到
/tmp/host_up.txt
。 - 离线主机的 IP 地址记录到
/tmp/host_down.txt
。
- 在线主机的 IP 地址记录到
#! /bin/bash
read -p "请输入网段前缀(如:192.168.2):" prefix
echo "请输入测试的IP范围(0-255之间)"
while true
do
read -p "起始IP地址(如:10):" start
read -p "结束IP地址(如:20):" end
# 检查输入是否为数字,并且在有效范围内
if [[ "$start$end" =~ ^[0-9]+$ ]] && [ "$start" -ge 0 ] && [ "$start" -le 255 ] && [ "$end" -le 255 ] && [ "$end" -ge "$start" ]
then
break
else
echo "起始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/null
if [ $? -eq 0 ];then
echo "$ip" >> "$up_file"
echo "主机 $ip 在线"
else
echo "$ip" >> "$down_file"
echo "主机 $ip 离线"
fi
done
echo "测试完毕,结果已保存到 $up_file 和 $down_file"
测试示例:
4、批量修改远程主机 root 密码
要求:
- 使用 for 循环:读取 hosts.txt 文件中的主机 IP,依次连接并修改 root 密码。
- 记录结果:无论成功或失败,详细记录到 password_change.log,包括时间戳、IP 地址和错误信息。
- 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" ]; then
echo "密码不匹配。退出脚本。"
exit 1
fi
# 检查密码是否为空
if [ -z "$new_password" ]; then
echo "密码不能为空。退出脚本。"
exit 1
fi
# 读取主机列表文件并使用 for 循环处理每个主机
for host in $(cat hosts.txt); do
echo "正在处理主机: $host" | tee -a $LOG_FILE
# 尝试通过 SSH 执行远程命令修改密码
if ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@$host "echo 'root:$new_password' | chpasswd"; then
echo "[$(date +'%Y-%m-%d %H:%M:%S')] 密码修改成功:$host" | tee -a $LOG_FILE
else
echo "[$(date +'%Y-%m-%d %H:%M:%S')] 密码修改失败:$host" | tee -a $LOG_FILE
echo "错误详情:" | tee -a $LOG_FILE
# 记录详细的错误信息
ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@$host "echo 'root:$new_password' | chpasswd" 2>&1 | tee -a $LOG_FILE
fi
echo "----------------------------------------" | tee -a $LOG_FILE
done