Linux Shell 脚本使用YAD工具实现Shell图形化界面

1. YAD (Yet Another Dialog)工具介绍

简介: YAD 是 zenity 的增强分支,基于 GTK+ 的图形化工具,用于增强 Shell 脚本的交互性。它功能强大且支持多种窗口部件(如对话框、表单、进度条等),提供丰富的图形控件,适合需要复杂交互的脚本。

特点:

  • 高度灵活:支持多种控件(表格、树形视图、进度条、日历、滑块等)。
  • 脚本友好:通过命令行参数配置,与 Shell 脚本无缝集成。
  • 自定义界面:支持窗口尺寸、主题、图标等细节调整。
  • 事件驱动:可通过 --button 和 --form 处理复杂交互。

优点:

功能强大,适合复杂界面。

文档详细(man yad 或在线资源)。

缺点:

学习曲线较陡(参数较多)。

依赖 GTK+ 库。

2.Linux Debian系统安装YAD

bash 复制代码
# Debian/Ubuntu
sudo apt install yad

3.以下是获取 yad 详细文档的途径及基本使用方法:

1). 查看本地文档

  • 通过 man 手册 :

    安装 yad 后,可直接通过终端查看其完整文档:

    bash 复制代码
    man yad

    若未找到手册,可能需要额外安装文档包(如 yad-doc)。

  • 命令行帮助 :

    运行 yad --help 或 yad --help-all 可查看所有支持的选项和参数列表。例如:

    bash 复制代码
    yad --help-all | less

2). 在线文档与资源

  • 官方仓库与 Wiki :
    yad 的代码托管在 GitHub,其 Wiki 页面提供了详细的使用说明和示例。
  • 社区教程 :
    开发者社区和博客(如 CSDN)常有 yad 的教程,可通过搜索关键词 "yad shell 图形化" 查找相关文章。

4. 基本用法示例

以下是一些常见功能的简单示例,供参考:

消息框

bash 复制代码
yad --title "提示" --text "操作已完成!" --button="确定"

文件选择

bash 复制代码
file=$(yad --title "选择文件" --file)
echo "所选文件: $file"

表单输入

bash 复制代码
yad --form --title "用户信息" \
    --field="用户名" \
    --field="密码:H" \
    --field="年龄:NUM" '18' '!100' '1'

进度条

bash 复制代码
for i in {1..100}; do
  echo $i
  sleep 0.1
done | yad --progress --title "进度" --text "正在处理..." --auto-close

5.创建Linux Shell脚本文件test.sh,写入下面简单输入框的测试代码:

bash 复制代码
#!/bin/bash
result=$(yad --title="输入示例" --form --field="姓名:" --field="年龄:NUM")
echo "输入内容:$result"

6.赋予test.sh执行权限

bash 复制代码
sudo chmod 755 test.sh

7.运行test.sh

bash 复制代码
./test.sh

如果出现下面报错:

bash 复制代码
(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

bash 复制代码
sudo apt install at-spi2-core

8.再次运行test.sh,Linux Shell脚本成功实现图形化界面

bash 复制代码
./test.sh

9.以下是使用yad工具实现的图形化Shell脚本,用于将指定文件夹中的图片转换为PDF文件

img2pdf.sh

bash 复制代码
#!/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效果如下:


相关推荐
夜听莺儿鸣5 小时前
502-003_Linux 中断与异常(一):从Linux角度理解中断与异常
linux·中断与异常·linux中断
杨云龙UP6 小时前
TDengine 3.4.2.8 Community 三节点三副本生产集群部署实战(DNode/MNode/taosAdapter/Explorer)
大数据·linux·运维·数据库·tdengine·时序库
向成科技6 小时前
XC3576H工控主板|深度适配Ubuntu 26.04 LTS,释放边缘AI与工业开发新潜能
linux·人工智能·ubuntu·机器人·硬件·主板·边缘ai
Fcy6487 小时前
Linux下 进程间关系与守护进程
linux·运维·服务器·守护进程
码农小韩7 小时前
Linux驱动理论(二)——Linux字符设备驱动
linux·嵌入式软件开发·linux操作系统·linux应用开发·linux驱动理论
well06128 小时前
Linux粘滞位与Makefile机制深度解析
linux·运维·服务器
再写一行代码就下班8 小时前
linux sh脚本在windows修改导致无法使用解决方式
java·linux·centos
额额额对了8 小时前
SPI通信
linux·c语言·汇编·单片机·嵌入式硬件·arm
子木HAPPY阳VIP8 小时前
Ubuntu 关闭防火墙操作步骤
linux·运维·ubuntu
王振超wzc9 小时前
嵌入式开发环境搭建--WM软件安装,Ubuntu操作系统安装
linux·运维·ubuntu