在编写 Linux Shell 脚本时,我们常常需要从用户那里获取输入。然而,如果不对这些输入进行验证,就可能带来严重的安全隐患,比如命令注入、路径遍历或程序崩溃。本文将手把手教你如何对用户输入进行基本但有效的验证,即使是编程小白也能轻松上手!
想象一下,你写了一个备份脚本,让用户输入要备份的文件名:
#!/bin/bashread -p "请输入要备份的文件名: " filenamecp "$filename" backup/ 看起来没问题?但如果用户输入的是 ; rm -rf / 呢?虽然在这个例子中因为引号保护不会执行,但在其他场景(如未加引号或使用 eval)就可能造成灾难性后果。因此,Linux Shell输入验证 是保障脚本安全的第一道防线。
最简单的验证就是确保用户没有直接按回车:
#!/bin/bashwhile true; do read -p "请输入用户名: " username if [[ -z "$username" ]]; then echo "错误:用户名不能为空!" else break fidoneecho "你好,$username!" 如果你期望用户输入一个年龄或数量,可以用正则表达式检查是否只包含数字:
#!/bin/bashread -p "请输入您的年龄: " ageif ! [[ "$age" =~ ^[0-9]+$ ]]; then echo "错误:请输入一个有效的正整数!" exit 1fiecho "您的年龄是 $age 岁。" 防止缓冲区溢出或异常长的输入:
#!/bin/bashread -p "请输入昵称(最多10个字符): " nicknameif (( ${#nickname} > 10 )); then echo "错误:昵称不能超过10个字符!" exit 1fi 只允许特定字符,比如字母、数字和下划线:
#!/bin/bashread -p "请输入项目名称(仅限字母、数字、下划线): " projectif ! [[ "$project" =~ ^[a-zA-Z0-9_]+$ ]]; then echo "错误:项目名称只能包含字母、数字和下划线!" exit 1fi 永远不要直接将用户输入拼接到命令中,尤其是使用 eval 或未加引号的变量。正确的做法是使用参数化方式,并配合 Shell脚本安全 最佳实践:
# 错误示例 ❌command="ls -l $user_input"eval $command# 正确示例 ✅ls -l -- "$user_input" # 使用 -- 防止选项注入 通过简单的输入检查,你可以大幅提升脚本的健壮性和安全性。记住以下几点:
eval 和动态命令拼接;掌握这些基础的 Bash输入验证 技巧,你就能写出更安全、更可靠的 Shell 脚本了!
本文由主机测评网于2025-11-30发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025111441.html