


























在 Shell 脚本中,“最容易” 取决于你的具体场景。但综合来看,公认最易用、零依赖且功能全覆盖的方式是:内置命令 read + 专用菜单命令 select。
针对不同需求,我按“易用性”从高到低给你排个序,直接复制就能用:
如果只是想让用户输入一个值,read -p 是绝对的王道。
#!/bin/bash
# 字符串输入
read -p "请输入你的名字: " name
echo "你好, $name"
# 密码输入(不显示字符)
read -s -p "请输入密码: " password
echo -e "\n密码已接收"
# 超时自动跳过(5秒不输入就继续执行)
read -t 5 -p "5秒内输入文件名,否则跳过: " file
echo "输入的是: ${file:-'未输入'}"
优点:无需安装任何东西,所有 Linux/Unix 自带。
如果你需要让用户从几个选项里选一个,select 命令是最省事的,它会自动生成编号菜单并循环等待。
#!/bin/bash
echo "请选择部署环境:"
select env in "开发(dev)" "测试(test)" "生产(prod)" "退出"; do
case $env in
"开发(dev)") echo "你选了开发环境"; break ;;
"测试(test)") echo "你选了测试环境"; break ;;
"生产(prod)") echo "你选了生产环境"; break ;;
"退出") echo "退出"; break ;;
*) echo "请输入正确的编号 (1-4)";;
esac
done
优点:自动处理输入校验(用户输字母也不会报错,只会提示重新选)。
如果你只是问“是否继续”,不用复杂的正则,直接用 read 配合大小写忽略:
#!/bin/bash
read -p "确定要删除该文件吗?(y/n): " -n 1 -r # -n 1 表示只读一个字符,无需按回车
echo # 换行
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo "执行删除..."
else
echo "已取消"
fi
如果你的脚本需要在服务器上给运维人员看,且系统预装了 whiptail(几乎所有发行版默认自带),它比 Dialog 更简单:
#!/bin/bash
# 复选框菜单
CHOICE=$(whiptail --menu "请选择操作" 15 50 4 \
"1" "启动服务" \
"2" "停止服务" \
"3" "重启服务" 3>&1 1>&2 2>&3)
# 输入框
NAME=$(whiptail --inputbox "请输入新用户名" 10 40 3>&1 1>&2 2>&3)
# 进度条(模拟)
{
for i in {1..100}; do
echo $i
sleep 0.05
done
} | whiptail --gauge "正在处理..." 10 50 0
优点:界面专业,支持鼠标点击。
缺点:需要系统预装(yum install whiptail 或 apt install whiptail)。
如果你在桌面 Linux(有图形环境)下,zenity 是最容易的:
#!/bin/bash
NAME=$(zenity --entry --title="输入" --text="请输入你的名字:")
zenity --question --text="确认删除吗?" --width=200
read -p + select。这是最简单的,没有外部依赖,复制到任何机器都能跑。select,它帮你处理了循环、编号和异常输入。whiptail,几行代码就能做出类似 BIOS 的蓝底界面,显得很专业。避坑提示:尽量不要手动用 echo "1.xxx" + read 去模拟菜单,因为你要自己处理空输入、字母输入和死循环。直接用 select 能省去你 80% 的异常处理代码。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。