在编写 Linux Shell 脚本时,我们常常需要接收用户的输入。然而,未经验证的输入可能会导致脚本行为异常、系统被入侵,甚至数据丢失。因此,Linux Shell输入验证是每个脚本开发者必须掌握的基础技能。

想象一下,你写了一个备份脚本,要求用户输入要备份的目录路径:
#!/bin/bashecho "请输入要备份的目录:"read dirrsync -av "$dir" /backup/如果用户不小心输入了 /etc/passwd 或者更糟——输入了带有空格或特殊字符的路径(如 /my folder),甚至恶意输入如 ; rm -rf /,你的脚本就可能执行危险操作!
通过合理的用户输入检查,我们可以提前拦截这些问题,确保脚本只处理合法、安全的数据。
最基础的验证:确保用户确实输入了内容。
read inputif [ -z "$input" ]; then echo "错误:输入不能为空!" exit 1fi使用 -d 判断是否为有效目录:
read dirif [ ! -d "$dir" ]; then echo "错误:'$dir' 不是一个有效的目录!" exit 1fi如果你需要用户输入年龄、数量等数字,可以这样验证:
read numif ! [[ "$num" =~ ^[0-9]+$ ]]; then echo "错误:请输入一个正整数!" exit 1fi永远不要直接将用户输入拼接到命令中。使用引号包裹变量,并避免使用 eval。更好的做法是使用白名单机制。
# 安全做法:只允许特定选项read choicecase $choice in start|stop|restart) systemctl $choice nginx ;; *) echo "错误:仅允许 start、stop 或 restart" exit 1 ;;esac下面是一个经过严格Bash输入验证的脚本,用于安全删除用户指定的文件:
#!/bin/bash# 安全删除脚本read -p "请输入要删除的文件路径: " file# 1. 检查是否为空if [ -z "$file" ]; then echo "错误:文件路径不能为空!" exit 1fi# 2. 检查是否为绝对路径(防止相对路径误操作)if [[ "$file" != /* ]]; then echo "错误:请使用绝对路径(如 /home/user/file.txt)" exit 1fi# 3. 检查文件是否存在if [ ! -f "$file" ]; then echo "错误:文件 '$file' 不存在!" exit 1fi# 4. 确认操作read -p "确定要删除 '$file' 吗?(y/N): " confirmif [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then echo "操作已取消。" exit 0fi# 执行删除rm -f "$file"echo "文件已成功删除。"Shell脚本安全的核心之一就是对用户输入进行严格验证。无论你是初学者还是有经验的开发者,都应养成以下习惯:
掌握这些技巧后,你的 Shell 脚本将更加健壮、安全,也能赢得他人的信任。赶快在你的下一个脚本中实践Linux Shell输入验证吧!
本文由主机测评网于2025-11-30发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/2025111364.html