热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

图形环境下的shell编程

目录selectdialogtputnotify-sendkdialogzenityselectselect命令可以创建很简单的菜单,然后获取输入的答案.select命令的格式

目录

  • select
  • dialog
  • tput
  • notify-send
  • kdialog
  • zenity


select

select命令可以创建很简单的菜单,然后获取输入的答案.

select命令的格式为:

select variable in list
docommands
done

其中list参数是由空格分隔的文本选项列表,这些列表构成了整个菜单. select命令会将每个列表现实成一个带编号的选项,然后为选项显示一个由PS3环境变量定义的提示符.

例如我们可以创建一个简单的文件选择脚本:

if [ $# -eq 0 ];thenfile=$(pwd)
elsefile=$1
fiif [ -d $file ];thenselect f in $(ls $file)doexec $0 $file/$fdone
elseecho $file
filujun9972@lujun9972-desktop:~$ file_selector.sh bin1) - 17) git-sync.sh2) autoload 18) mail2org.sh3) cleanFiles.pl 19) mgrep.sh4) develop 20) monitor_network.sh5) dired.sh 21) mpg123.sh6) download_comic_from_avbebe.sh 22) my-byte-split.sh7) ec 23) my-line-split.sh8) ediff.sh 24) pick.sh9) emacsclient.sh 25) ptree.sh
10) emages.sh 26) rcsvi.sh,v
11) es 27) redo.sh
12) eshell.sh 28) shr
13) et 29) testClean.cfg
14) file_selector.sh 30) vir
15) gclsg.lisp.tw 31) wget-website.sh
16) git-push.sh
#? 2
1) git-pull.sh
2) study.sh
#? 1
bin/autoload/git-pull.sh

dialog

dialog能够使用ANSI转义控制字符从文本环境创建标准的窗口对话框.

下面是用用dialog来重写的file_selector.sh

if [ $# -eq 0 ];thenfile=$(pwd)
elsefile=$1
fifile=$(dialog --title "file selector" --stdout --fselect $file 10 50)if [ -d $file ];thenexec $0 $file
elseecho $file
fi

img


tput

tput 命令将通过 terminfo 数据库对您的终端会话进行初始化和操作.

通过使用 tput,您可以更改几项终端功能:如移动或更改光标、更改文本属性,以及清除终端屏幕的特定区域等.

下面是一个例子:

#!/bin/bashBOLD=$(tput bold)
REV=$(tput rev)
NORMAL=$(tput sgr0)
CURSOR_OFF=$(tput civis)
CURSOR_ON=$(tput cnorm)tput inittput clear
echo $CURSOR_OFF
tput cup 2 15
echo "${BOLD}粗体效果{NORMAL}\n"
echo "${REV}反转效果${NORMAL}"
echo $CURSOR_ON

img


notify-send

notify-send让你通过通知进程发送一个桌面通知给用户.

例如下面是一个检测网络的脚本.

#!/bin/bash
target="www.baidu.com"
port=80
interval=60 # 秒function live_p()
{local remote=$1local port=$2if timeout 5 echo >/dev/tcp/$remote/$port;thenecho "网络通了!"elseecho "网络不通了!"fi
}while :
docurrent_state=$(live_p $target $port)if [ "$current_state" != "$old_state" ];thennotify-send $current_statefiold_state=$current_state;sleep $interval
done

网络不通的情况下,它会显示一个窗口告诉你”网络不通了!”,网络恢复之后,它又会显示一个窗口告诉你”网络通了”

img


kdialog

kdialog为KDE桌面提供了类似dialog式的标准窗口. 其生成的窗口能和其他KDE窗口很好的融合.

关于kdialog的使用方法可以参见https://techbase.kde.org/Development/Tutorials/Shell_Scripting_with_KDE_Dialogs

kdialog的file_selector.sh可以是这样的

if [ $# -eq 0 ];thenfile=$(pwd)
elsefile=$1
fiif [ -d $file ];thenfile=$(kdialog --getopenfilename $file)
fi
echo $file

img


zenity

zenity 是gnome版的dialog. 它针对不同的对话框选项有不同的参数:

对话框选项

  • –calendar: 显示日历对话框
  • –entry: 显示文字输入栏对话框
  • –error: 显示错误信息对话框
  • –file-selection: 显示文件选择对话框
  • –info: 显示信息对话框
  • –list: 显示清单对话框
  • –progress: 显示进度指示窗
  • –question: 显示提问信息对话框
  • –text-info: 显示文字资信对话框
  • –warning: 显示警告信息对话框

一般选项

  • –title=标题: 指定对话框的标题
  • –window-icon=图示路径: 指定视窗使用的图示
  • –width=宽度: 指定宽度
  • –height=高度: 指定高度

日历选项

  • –text=STRING: 指定对话框中的文字
  • –day=INT: 指定日历中的日期
  • –month=INT: 指定日历中的月份
  • –year=INT: 指定日历中的年份
  • –date-format=STRING: 指定回传的日期格式

文字输入栏选项

  • –text=STRING: 指定对话框中的文字
  • –entry-text=STRING: 指定输入栏中的文字
  • –hide-text: 隐藏输入栏中的文字

错误信息选项

  • –text=STRING: 指定对话框中的文字

有关文件选择的选项

  • –filename=文件名称: 指定文件名称
  • –multiple: 允许同时选择多个文件
  • –separator=分隔字符: 指定分隔输出结果的字符。

信息选项

  • –text=STRING: 指定对话框中的文字

清单选项

  • –column=STRING: 指定栏位标题
  • –checklist: 第一栏使用独立选择按钮
  • –radiolist: 第一栏使用多项选择按钮
  • –separator=分隔字符: 指定分隔输出结果的字符
  • –editable: 可以更改文字

进度选项

  • –text=STRING: 指定对话框中的文字
  • –percentage=INT: 指定开始时的百份比数值
  • –pulsate: 填满进度列
  • –auto-close: 当进度达到100% 时关闭对话框

提问选项

  • –text=STRING: 指定对话框中的文字

文字选项

  • –filename=文件名称: 从文件中载入文本
  • –editable: 可以更改文字

警告信息选项

  • –text=STRING: 指定对话框中的文字

GTK+ 选项

  • –gdk-debug=标签: 准备设定的gdk 调试标签
  • –gdk-no-debug=标签: 准备去除的gdk 调试标签
  • –display=画面: 准备使用的 X 画面
  • –sync: 进行 X 同步呼叫
  • –name=名称: 视窗总管所需的程式名称
  • –class=类别: 视窗总管所需的程式类别名称

–gxid-host=主机
–gxid-port=端口号

  • –gtk-debug=标签: 准备设定的gtk+ 调试标签
  • –gtk-no-debug=标签: 准备去除的gtk+ 调试验标签
  • –g-fatal-warnings: 将所有警告信息作为严重错误处理
  • –gtk-module=模块: 载入额外的 Gtk 模块

zennity版本的file_selector.sh是这样的

if [ $# -eq 0 ];thenfile=$(pwd)
elsefile=$1
fiif [ -d $file ];thencd $filefile=$(zenity --file-selection)
fi
echo $file

img


推荐阅读
  • 深入解析Gradle中的Project核心组件
    在Gradle构建系统中,`Project` 是一个核心组件,扮演着至关重要的角色。通过使用 `./gradlew projects` 命令,可以清晰地列出当前项目结构中包含的所有子项目,这有助于开发者更好地理解和管理复杂的多模块项目。此外,`Project` 对象还提供了丰富的配置选项和生命周期管理功能,使得构建过程更加灵活高效。 ... [详细]
  • PHP中元素的计量单位是什么? ... [详细]
  • 基于Node.js的高性能实时消息推送系统通过集成Socket.IO和Express框架,实现了高效的高并发消息转发功能。该系统能够支持大量用户同时在线,并确保消息的实时性和可靠性,适用于需要即时通信的应用场景。 ... [详细]
  • Spring Boot 实战(一):基础的CRUD操作详解
    在《Spring Boot 实战(一)》中,详细介绍了基础的CRUD操作,涵盖创建、读取、更新和删除等核心功能,适合初学者快速掌握Spring Boot框架的应用开发技巧。 ... [详细]
  • 本文首先对信息漏洞的基础知识进行了概述,重点介绍了几种常见的信息泄露途径。具体包括目录遍历、PHPINFO信息泄露以及备份文件的不当下载。其中,备份文件下载涉及网站源代码、`.bak`文件、Vim缓存文件和`DS_Store`文件等。目录遍历漏洞的详细分析为后续深入研究奠定了基础。 ... [详细]
  • 本项目在Java Maven框架下,利用POI库实现了Excel数据的高效导入与导出功能。通过优化数据处理流程,提升了数据操作的性能和稳定性。项目已发布至GitHub,当前最新版本为0.0.5。该项目不仅适用于小型应用,也可扩展用于大型企业级系统,提供了灵活的数据管理解决方案。GitHub地址:https://github.com/83945105/holygrail,Maven坐标:`com.github.83945105:holygrail:0.0.5`。 ... [详细]
  • 本文介绍了如何通过掌握 IScroll 技巧来实现流畅的上拉加载和下拉刷新功能。首先,需要按正确的顺序引入相关文件:1. Zepto;2. iScroll.js;3. scroll-probe.js。此外,还提供了完整的代码示例,可在 GitHub 仓库中查看。通过这些步骤,开发者可以轻松实现高效、流畅的滚动效果,提升用户体验。 ... [详细]
  • 在稀疏直接法视觉里程计中,通过优化特征点并采用基于光度误差最小化的灰度图像线性插值技术,提高了定位精度。该方法通过对空间点的非齐次和齐次表示进行处理,利用RGB-D传感器获取的3D坐标信息,在两帧图像之间实现精确匹配,有效减少了光度误差,提升了系统的鲁棒性和稳定性。 ... [详细]
  • 本文详细介绍了如何在Linux系统中搭建51单片机的开发与编程环境,重点讲解了使用Makefile进行项目管理的方法。首先,文章指导读者安装SDCC(Small Device C Compiler),这是一个专为小型设备设计的C语言编译器,适合用于51单片机的开发。随后,通过具体的实例演示了如何配置Makefile文件,以实现代码的自动化编译与链接过程,从而提高开发效率。此外,还提供了常见问题的解决方案及优化建议,帮助开发者快速上手并解决实际开发中可能遇到的技术难题。 ... [详细]
  • 在IntelliJ IDEA中初始化Git并将项目推送到远程仓库的具体步骤包括:首先,登录Gitee(码云)账号并创建新的仓库;接着,在IDEA中通过VCS菜单选择Git进行本地项目的初始化;最后,配置远程仓库地址并执行推送操作,确保项目代码安全上传至云端。 ... [详细]
  • 深入解析零拷贝技术(Zerocopy)及其应用优势
    零拷贝技术(Zero-copy)是Netty框架中的一个关键特性,其核心在于减少数据在操作系统内核与用户空间之间的传输次数。通过避免不必要的内存复制操作,零拷贝显著提高了数据传输的效率和性能。本文将深入探讨零拷贝的工作原理及其在实际应用中的优势,包括降低CPU负载、减少内存带宽消耗以及提高系统吞吐量等方面。 ... [详细]
  • voc生成xml 代码
    目录 lxmlwindows安装 读取示例 可视化 生成示例 上面是代码,下面有调用示例 api调用代码,其实只有几行:这个生成代码也很简 ... [详细]
  • 探索JavaScript倒计时功能的三种高效实现方法及代码示例 ... [详细]
  • 在Linux环境中,通过编写Shell脚本来实现自定义命令的创建与激活,能够极大地简化服务器上多个子系统的管理操作。例如,通过简单的命令如“tt”,即可快速查看各个应用程序的名称及其运行状态,从而提高系统维护的效率和便捷性。 ... [详细]
  • PJSIP 编译与开发指南:深入解析 PJSIP 库的应用与优化
    PJSIP 编译与开发指南:深入解析 PJSIP 库的应用与优化 ... [详细]
author-avatar
rare懿然
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有