当前位置: 首页 > ops >正文

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

🧪 使用方法

  1. 保存为文件,例如 whiptail_demo.sh

  2. 添加执行权限:

    chmod +x whiptail_demo.sh
    
  3. 运行脚本:

    ./whiptail_demo.sh
    

http://www.xdnf.cn/news/5222.html

相关文章:

  • 【目录】学习如何使用dify建设专业知识库
  • 【AI提示词】金字塔模型应用专家
  • 3.优惠券秒杀
  • c++类【高潮】
  • MySQL开篇
  • C++Primerplus编程练习 第八章
  • 生产级AI/ML特征存储平台:Feast全面使用指南 — Use Cases Third party integrations FAQ
  • java: Compilation failed: internal java compiler error 报错解决方案
  • 【Java学习日记32】:面向对象,类和对象
  • matlab介绍while函数
  • 计算机网络:怎么理解WIFI穿墙?
  • SSRF服务端请求伪造
  • 2025python学习笔记
  • 用tinyb210实现srsran小基站
  • 全国青少年信息素养大赛 Python编程挑战赛初赛 内部集训模拟试卷六及详细答案解析
  • 2025年保安员考试题库及答案
  • 电影感户外哑光人像自拍摄影Lr调色预设,手机滤镜PS+Lightroom预设下载!
  • Linux进程间信号
  • 【25软考网工】第六章(2)信息加密技术
  • 【金仓数据库征文】金仓数据库(KingbaseES)迁移与集群部署实战:从MySQL到KES的全流程解析
  • 2003-2020年高铁线路信息数据
  • 为什么 AI 理解不了逻辑问题?
  • 街景主观感知全流程(自建数据集+两两对比程序+Trueskill计算评分代码+训练模型+大规模预测)27
  • JavaScript--Array
  • ProfiNet转MODBUS模块构建西门子PLC与RTU仪表通讯连接方案
  • 大学之大:悉尼科技大学2025.5.10
  • Innovus 25.1 版本更新:助力数字后端物理设计新飞跃
  • Python自动化-python基础(下)
  • 1 2 3 4 5顺序插入,形成一个红黑树
  • 阿里千问Qwen大模型API调用(Python版)