Linux终端展示效果优化:【whiptail】使用教程
🧰 Linux终端展示效果优化:whiptail
使用教程
🧭 什么是 whiptail
whiptail
是一个轻量级终端对话框工具,功能与 dialog
类似,用于在 Shell 脚本中创建图形交互界面。与 dialog
相比,它依赖更少,通常默认安装于多数 Linux 发行版(如 Ubuntu、Debian)。
🧩 示例效果展示
- 启动后显示欢迎界面
- 依次请求用户名、性别、语言偏好
- 提示确认信息
- 展示模拟进度条
- 最后提示脚本结束
📦 安装 whiptail
大多数系统默认已安装,可使用以下命令确认:
whiptail --version
若未安装(Ubuntu/Debian):
sudo apt update
sudo apt install whiptail
🧪 基本用法示例
1. ✅ 显示消息框
whiptail --title "提示" --msgbox "操作成功完成!" 10 40
参数说明:
--title
: 设置窗口标题--msgbox
: 消息框内容10 40
: 窗口高度和宽度
2. ❓ 确认对话框(Yes/No)
if whiptail --title "确认" --yesno "你确定要继续吗?" 10 60; thenecho "用户选择了 Yes"
elseecho "用户选择了 No"
fi
3. ✍️ 输入框
NAME=$(whiptail --title "输入框" --inputbox "请输入你的名字:" 10 60 3>&1 1>&2 2>&3)
echo "你好,$NAME"
3>&1 1>&2 2>&3
是用于正确重定向 whiptail
的输出结果。
4. 🔘 单选菜单
CHOICE=$(whiptail --title "菜单" --menu "请选择一个选项:" 15 50 4 \
1 "安装软件" \
2 "更新系统" \
3 "重启" \
4 "退出" 3>&1 1>&2 2>&3)echo "你选择了:$CHOICE"
5. ☑️ 多选(复选框)
CHOICES=$(whiptail --title "复选框" --checklist \
"你喜欢哪些语言? 用空格选择,回车确认:" 15 60 4 \
"Python" "" ON \
"Go" "" OFF \
"Rust" "" OFF \
"JavaScript" "" ON 3>&1 1>&2 2>&3)echo "你选择了:$CHOICES"
6. 📊 进度条
{for i in $(seq 1 100); doecho $isleep 0.02done
} | whiptail --gauge "正在处理..." 6 50 0
--gauge
会动态显示从 stdin
输入的百分比值。
🎨 美化技巧
- 窗口大小合理设置,例如高度
10~20
,宽度40~70
,避免太小或太大。 - 利用
--title
和简洁提示文案增强用户体验。 - 与 ANSI 彩色输出结合,使得非 GUI 终端也有“类图形”的美观交互。
🛠️ 实战:安装脚本中的交互确认
#!/bin/bash
set -euo pipefailif ! whiptail --title "确认安装" --yesno "你想要安装吗?" 10 60; thenecho "用户取消安装。"exit 1
fiwhiptail --msgbox "开始安装..." 10 40
# 执行安装逻辑
🧩 总结
类型 | 命令关键字 | 说明 |
---|---|---|
消息框 | --msgbox | 显示通知或提示信息 |
输入框 | --inputbox | 获取用户输入 |
确认框 | --yesno | 获取 Yes/No 选择 |
菜单选择 | --menu | 单选菜单 |
多项选择 | --checklist | 多选复选框 |
进度条 | --gauge | 展示处理进度 |
以下是一个功能完整的 whiptail
Shell 脚本示例,它涵盖了常见的对话框类型:消息框、输入框、确认框、单选菜单、多选框和进度条,结构清晰、便于扩展和学习。
✅ 示例脚本 whiptail_demo.sh
#!/bin/bash
set -euo pipefail# 显示欢迎消息
whiptail --title "Whiptail 演示" --msgbox "欢迎使用 Whiptail 交互脚本演示!" 10 50# 输入框
USERNAME=$(whiptail --title "用户信息" --inputbox "请输入您的用户名:" 10 50 3>&1 1>&2 2>&3)# 选择性别(菜单)
GENDER=$(whiptail --title "性别选择" --menu "请选择您的性别:" 15 50 2 \
"M" "男" \
"F" "女" 3>&1 1>&2 2>&3)# 多选语言(复选框)
LANGS=$(whiptail --title "语言偏好" --checklist \
"请选择你常用的开发语言:" 15 60 5 \
"Python" "优雅简洁" ON \
"Go" "高性能并发" OFF \
"Rust" "安全高效" OFF \
"JavaScript" "前端主力" ON \
"Java" "企业级" OFF 3>&1 1>&2 2>&3)# 确认信息
whiptail --title "确认信息" --yesno \
"用户名:$USERNAME\n性别:$GENDER\n语言:$LANGS\n\n是否继续?" 15 60if [[ $? -ne 0 ]]; thenwhiptail --title "已取消" --msgbox "用户取消了操作。" 10 40exit 1
fi# 模拟进度条
{for i in $(seq 0 100); doecho $isleep 0.02done
} | whiptail --gauge "正在提交信息,请稍候..." 6 50 0# 最终提示
whiptail --title "完成" --msgbox "感谢您的填写,脚本执行完毕!" 10 40
🧪 使用方法
-
保存为文件,例如
whiptail_demo.sh
-
添加执行权限:
chmod +x whiptail_demo.sh
-
运行脚本:
./whiptail_demo.sh