1. YAD (Yet Another Dialog)工具介绍
简介:
YAD 是 zenity 的增强分支,基于 GTK+ 的图形化工具,用于增强 Shell 脚本的交互性。它功能强大且支持多种窗口部件(如对话框、表单、进度条等),提供丰富的图形控件,适合需要复杂交互的脚本。
特点:
- 高度灵活:支持多种控件(表格、树形视图、进度条、日历、滑块等)。
- 脚本友好:通过命令行参数配置,与 Shell 脚本无缝集成。
- 自定义界面:支持窗口尺寸、主题、图标等细节调整。
- 事件驱动:可通过 –button 和 –form 处理复杂交互。
优点:
功能强大,适合复杂界面。
文档详细(man yad 或在线资源)。
缺点:
学习曲线较陡(参数较多)。
依赖 GTK+ 库。
2.Linux Debian系统安装YAD
1 2 3 |
# Debian/Ubuntu sudo apt install yad |
3.以下是获取 yad
详细文档的途径及基本使用方法:
1). 查看本地文档
- 通过
man
手册:
安装yad
后,可直接通过终端查看其完整文档:12man yad若未找到手册,可能需要额外安装文档包(如
yad-doc
)。 -
命令行帮助:
运行yad --help
或yad --help-all
可查看所有支持的选项和参数列表。例如:12yad --help-all | less
2). 在线文档与资源
- 官方仓库与 Wiki:
yad
的代码托管在 GitHub,其 Wiki 页面提供了详细的使用说明和示例。 - 社区教程:
开发者社区和博客(如 CSDN)常有yad
的教程,可通过搜索关键词 “yad shell 图形化” 查找相关文章。
4. 基本用法示例
以下是一些常见功能的简单示例,供参考:
消息框
1 2 |
yad --title "提示" --text "操作已完成!" --button="确定" |
文件选择
1 2 3 |
file=$(yad --title "选择文件" --file) echo "所选文件: $file" |
表单输入
1 2 3 4 5 |
yad --form --title "用户信息" \ --field="用户名" \ --field="密码:H" \ --field="年龄:NUM" '18' '!100' '1' |
进度条
1 2 3 4 5 |
for i in {1..100}; do echo $i sleep 0.1 done | yad --progress --title "进度" --text "正在处理..." --auto-close |
5.创建Linux Shell脚本文件test.sh,写入下面简单输入框的测试代码:
1 2 3 4 |
#!/bin/bash result=$(yad --title="输入示例" --form --field="姓名:" --field="年龄:NUM") echo "输入内容:$result" |
6.赋予test.sh执行权限
1 2 |
sudo chmod 755 test.sh |
7.运行test.sh
1 2 |
./test.sh |
如果出现下面报错:
1 2 |
(yad:35909): dbind-WARNING **: 11:27:58.421: AT-SPI: Error retrieving accessibility bus address: org.freedesktop.DBus.Error.ServiceUnknown: The name org.a11y.Bus was not provided by any .service files |
需要安装at-spi2-core
1 2 |
sudo apt install at-spi2-core |
8.再次运行test.sh,Linux Shell脚本成功实现图形化界面
1 2 |
./test.sh |
9.以下是使用yad工具实现的图形化Shell脚本,用于将指定文件夹中的图片转换为PDF文件
img2pdf.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
#!/bin/bash # 检查yad是否安装 if ! command -v yad &>/dev/null; then echo "错误:yad未安装。请先安装yad。" echo "在Ubuntu/Debian上可以使用:sudo apt install yad" exit 1 fi # 检查ImageMagick是否安装 if ! command -v convert &>/dev/null; then yad --error --text="ImageMagick未安装。请先安装ImageMagick(例如:sudo apt install imagemagick)" exit 1 fi # 选择源文件夹 selected_dir=$(yad --title="选择图片文件夹" --file --directory --width=600 --height=400) [ -z "$selected_dir" ] && exit 1 # 查找支持的图片文件 mapfile -t image_files < <(find "$selected_dir" -maxdepth 1 -type f \( \ -iname "*.jpg" -o \ -iname "*.jpeg" -o \ -iname "*.png" -o \ -iname "*.gif" -o \ -iname "*.webp" \) | sort -V) # 检查找到的文件数量 if [ ${#image_files[@]} -eq 0 ]; then yad --error --text="未找到支持的图片文件!\n支持格式:JPG/PNG/GIF/WEBP" exit 1 fi # 选择输出文件路径 output_pdf=$(yad --file --save \ --title="保存PDF文件" \ --filename="$selected_dir/output.pdf" \ --confirm-overwrite \ --width=600 \ --height=400 \ --file-filter="PDF文件 | *.pdf") [ -z "$output_pdf" ] && exit 1 # 显示进度对话框 ( for ((i=0; i<=100; i++)); do echo $i sleep 0.1 done ) | yad --progress \ --title="转换进度" \ --text="正在生成PDF文件..." \ --percentage=0 \ --auto-close \ --width=300 \ --no-cancel # 执行转换命令 if convert "${image_files[@]}" -quality 90 "$output_pdf"; then yad --info --text="PDF文件创建成功!\n保存路径:$output_pdf" --width=300 else yad --error --text="文件转换失败,请检查文件格式!" --width=300 fi |
赋予执行权限,并运行img2pdf.sh效果如下: