本文共 3016 字,大约阅读时间需要 10 分钟。
你提到,有些误解认为 shell 脚本仅用于 CLI 环境,但实际上在 KDE 或 Gnome 桌面下,你可以利用一些工具编写 GUI 或 network(socket)脚本。shell 脚本可以使用一些 GUI 组件(如菜单、警告框、进度条等),并控制终端输出、光标位置和各种输出效果。以下是一些常用的工具和命令,可以帮助你构建强壮的、可交互的、对用户友好的 UNIX/Linux bash 脚本。
notify-send 命令允许你借助通知守护进程向用户发送桌面通知。这对于通知用户某个事件或显示信息非常有用。在 Debian 或 Ubuntu 上,你需要安装 libnotify-bin 包:
sudo apt-get install libnotify-bin
如果你使用 RHEL,请运行:
sudo yum install libnotify
Fedora Linux 用户请使用下列命令:
sudo dnf install libnotify
以下是一个简单的示例,用于从命令行发送桌面通知:
notify-send "rsnapshot done :)"
示例输出可以根据你选择的参数不同有所变化,例如:
-t 5000
:指定超时时间(毫秒),例如 5 秒。-u low
:设置紧急等级(如:低、普通、紧急)。-i gtk-dialog-info
:设置要显示的图标名称或路径。更多关于 notify-send 的功能信息,请参考其手册。
tput 命令用于设置终端特性。通过 tput,你可以:
以下是一个实例,展示了如何在 shell 脚本中设置颜色和光标位置:
#!/bin/bashcleartput cup 3 15 # 光标移动到 (3,15) 位置tput setaf 3 # 设置前景颜色为红色echo "Welcome to XYX Corp LTD." tput sgr0 # 恢复默认颜色设置tput cup 5 17 # 光标移动到新的位置tput reve # 启用反转模式echo "Main Menu" tput sgr0tput cup 7 15echo "Here is a sample menu:"tput cup 8 17echo "1. User Management"tput cup 9 17echo "2. Service Management"tput cup 10 17echo "3. Process Management"tput cup 12 17read -p "Enter your choice [1-4] " choicetput cleartput sgr0tput rc
setleds 命令允许你设置键盘灯。以下是一个例子,打开和关闭数字键灯:
setleds -D +num # 打开数字键灯setleds -D -num # 关闭数字键灯
setleds 还支持其他选项,如大小写锁定灯和滚动锁定灯。更多信息请参考手册。
zenity 是一个基于 GTK+ 的工具,允许你在 shell 脚本中添加对话框、信息框和aredbox 对话框。下面的示例用于实现简单的域名查询 GUI 客户端:
#!/bin/bashdomain=$(zenity --title "Enter domain" --entry --text "Enter the domain you would like to see whois info" )if [ $? -eq 0 ]; then whois $domain | tee >(/tmp/whois.output.$(date +%s)) &>(${zenity --width=200 --height=100 --title="whois" --progress --pulsate --text="Searching domain info..." --auto-kill --auto-close --percentage=10}) zenity --width=800 --height=600 --title "Whois info for $domain" --text-info --filename="/tmp/whois.output.$(date +%s)"else zenity --error --text="No input provided" fi
kdialog 与 zenity 类似,但它是为 KDE 桌面和 Qt 应用设计的。以下是一个示例,用于显示信息:
kdialog --dontagain myscript:nofilemsg --msgbox "File: '~/.backup/config' not found."
Dialog 命令使用 curses 或 ncurses 库显示用户界面组件。以下是一个示例,用于询问用户是否确认删除文件:
#!/bin/bashdialog --title "Delete file" --backtitle "Linux Shell Script Tutorial Example" --yesno "Are you sure you want to permanently delete \"/tmp/foo.txt\"?" 7 60
对话框会返回一个退出状态(0 表示用户点击了“是”,1 表示用户点击了“否”,255 表示用户按了 Esc 键)。
logger 命令将信息写入系统日志文件,例如 /var/log/messages。以下是一个示例:
logger "MySQL database backup failed."tail -f /var/log/messageslogger -t mysqld -p daemon.error "Database Server failed"
setterm 命令用于设置终端属性。以下是一个示例,用于设置屏幕休眠设置:
setterm -blank 15 -powersave powerdown -powerdown 60
你也可以设置光标显示或关闭:
setterm -cursor off \\ # 关闭光标显示setterm -cursor on # 打开光标显示
如果你使用 cron 将脚本设置为每小时运行,例如,记得在脚本头部设置 DISPLAY=:0.0
以确保图形输出显示在本地屏幕上。
你喜欢使用哪些增加 shell 脚本趣味的 UNIX 工具吗?欢迎在评论区分享!
转载地址:http://ywxmz.baihongyu.com/