你想在 Linux 命令行中实现让脚本 / 命令执行时提示用户输入参数,核心是通过 read 命令实现交互式输入,也可以结合位置参数处理预设参数,我会分场景给你完整的实现方案。
一、基础场景:交互式提示输入单个 / 多个参数
这是最常用的方式,通过 read 命令暂停脚本执行,等待用户输入并将内容保存到变量中,适合需要用户手动输入的场景。
- 单个参数输入(示例:输入用户名)
#!/bin/bash
# 脚本名:input_single_param.sh
# 提示用户输入参数(-p 参数可以直接在一行显示提示语)
read -p "请输入你的用户名:" username
# 验证输入并使用参数
if [ -z "$username" ]; then # 判断是否为空输入
echo "错误:用户名不能为空!"
exit 1 # 非0退出表示执行失败
fi
echo "你输入的用户名是:$username"
echo "欢迎你,$username!"
- 多个参数输入(示例:输入姓名 + 年龄)
bash
运行
#!/bin/bash
# 脚本名:input_multi_params.sh
# 提示输入多个参数
read -p "请输入你的姓名:" name
read -p "请输入你的年龄:" age
# 验证输入
if [ -z "$name" ] || [ -z "$age" ]; then
echo "错误:姓名和年龄都不能为空!"
exit 1
fi
# 验证年龄是数字(可选)
if ! [[ "$age" =~ ^[0-9]+$ ]]; then
echo "错误:年龄必须是数字!"
exit 1
fi
echo "姓名:$name,年龄:$age"
echo "$name,你今年$age岁啦~"
使用方法:
将脚本保存为 .sh 文件(比如 input_params.sh);
赋予执行权限:chmod +x input_params.sh;
运行脚本:./input_params.sh,会看到提示语,输入参数后按回车即可。
二、进阶场景:混合 “位置参数 + 交互式提示”
如果希望脚本支持直接传参(如 ./script.sh 参数1 参数2),也支持 “不传参时自动提示输入”,可以这样写:
bash
运行
#!/bin/bash
# 脚本名:mix_param_input.sh
# 定义参数变量,优先使用位置参数($1、$2 是运行脚本时传入的参数)
name=${1:-}
age=${2:-}
# 如果位置参数为空,提示用户输入
if [ -z "$name" ]; then
read -p "请输入你的姓名:" name
fi
if [ -z "$age" ]; then
read -p "请输入你的年龄:" age
fi
# 后续验证逻辑和上面一致
if ! [[ "$age" =~ ^[0-9]+$ ]]; then
echo "错误:年龄必须是数字!"
exit 1
fi
echo "最终确认:姓名=$name,年龄=$age"
测试效果:
直接传参运行:./mix_param_input.sh 张三 25 → 不提示,直接使用参数;
不传参运行:./mix_param_input.sh → 依次提示输入姓名、年龄。
三、特殊需求:隐藏输入(如密码)
如果需要输入密码、密钥等敏感信息,用 read -s 可以隐藏输入内容(输入时不显示字符):
bash
运行
#!/bin/bash
# 脚本名:input_password.sh
read -p "请输入用户名:" username
read -s -p "请输入密码:" password # -s 隐藏输入
echo -e "\n" # 换行(因为-s会屏蔽回车的换行)
echo "用户名:$username,密码已接收(已隐藏显示)"
# 这里可以添加密码验证逻辑,比如和预设密码对比
if [ "$password" = "123456" ]; then
echo "密码正确,登录成功!"
else
echo "密码错误,登录失败!"
fi
总结
核心命令:read 是实现交互式参数输入的关键,-p 用于显示提示语,-s 用于隐藏敏感输入;
输入验证:务必检查参数是否为空、格式是否正确(如数字验证),避免脚本执行出错;
灵活用法:优先使用位置参数($1/$2),为空时再提示输入,兼顾脚本的 “直接传参” 和 “交互式输入” 两种场景。
如果有具体的参数类型(比如文件路径、IP 地址)需要验证,我可以帮你写针对性的脚本模板。