《Linux命令行与shell脚本编程大全》第十八章 图形化桌面环境中的脚本编程
18.1 创建文本菜单
直接上例子吧:
1 #!/bin/bash
2 function menu
3 {
4 clear
5 echo
6 echo -e "\t\t\tSys Admin Menu\n"
7 echo -e "\t1. Display disk space"
8 echo -e "\t2. Display logged usage"
9 echo -e "\t3. Display memory usage"
10 echo -e "\t0. Exit program"
11 echo -en "\t\t Enter option:"
12 read -n 1 option
13 }
14
15 function diskspace
16 {
17 clear
18 df -k
19 }
20
21 function whoseon
22 {
23 clear
24 who
25 }
26
27 function memusage
28 {
29 clear
30 cat /proc/meminfo
31 }
32
33 menu
34 case $option in
35 0)
36 echo
37 echo "Bye!!!" ;;
38 1)
39 diskspace ;;
40 2)
41 whoseon ;;
42 3)
43 memusage ;;
44 *)
45 clear
46 echo "Sorry, wrong selection"
47 esac
18.1.5 使用select命令
这个命令可以很轻松的创建出菜单
格式:
select variable in list
do
commands
done
list是由空格分隔的文本选项列表,这些列表构成整个菜单。
select会将每个列表项显示成一个带编号的选项,然后为选项显示一个有PS3环境变量定义的特殊指示符。
比如:
1 #!/bin/bash
2 function diskspace
3 {
4 clear
5 df -k
6 }
7
8 function whoseon
9 {
10 clear
11 who
12 }
13
14 function memusage
15 {
16 clear
17 cat /proc/meminfo
18 }
19
20 PS3="Enter option:"
21 select option in "Display disk space" "Display logged on user" "Display memory usage" "Exit program"
22 do
23 case $option in
24 "Exit program")
25 echo "Bye!!!"
26 exit ;;
27 "Display disk space")
28 clear
29 diskspace ;;
30 "Display logged on user")
31 clear
32 whoseon ;;
33 "Display memory usage")
34 clear
35 memusage ;;
36 *)
37 echo "Sorry, Error"
38 esac
39 done
18.2 制作窗口
dialog包是一个小工具。
这个包可以用ANSI转义控制字符在文本环境中创建标准的窗口对话框。
Ubuntu中安装:
sudo apt-get install dialog
18.2.1 dialog包
使用命令行参数来决定生成哪种窗口部件(widget)。
例如:
$dialog –inputbox “Enter you age:” 10 20 2>age.txt
部件输出在STDERR中,重定向到age.txt中。
具体可以通过help 查看。有下面这几项:

每个dialog部件都提供了两种形式的输出:
使用STDERR 使用退出状态码。
可以通过dialog命令的退出状态码来确定用户选择的按钮。
如果用户选择了。选择了。
如果部件返回了数据,比如菜单选择,那么dialog会将数据发送到STDERR。可以把STDERR重定向到一个文件中。
实例:
1)msgbox部件
在窗口显示一条简单的消息,直到用户单击ok按钮才消失、

2)yesno部件
允许用户对窗口中显示的问题选择yes或no。会生成两个按钮。
用户选择之后可以查看退出码知道用户选的是yes还是no
$echo $?

3)textbox部件
在窗口中显示大量的信息的极佳办法。会生成一个滚动窗口来显示由参数指定的文本

4)menu部件
创建文本菜单的窗口版本。需要为每个选项指定标号和文本。
选择的第几个选项可以通过STDERR输出

5)fselect部件
可以用fselect部件来浏览文件的位置并选择文件
选择的目录在STDERR中。

18.2.2 dialog选项
可以在dialog命令中定制很多不同的选项。比如之前的 –title
还有一些其他选项可以全面定制窗口外观和操作。有一个表有说明,表太长了。
18.2.3 在脚本中使用dialog命令
记住两个注意事项:
)如果有cancel或no按钮,检查dialog命令的退出状态码
)重定向STDERR获得输出值
例子:
1 #!/bin/bash
2 # using dialog to create a menu
3 temp=$(mktemp -t test.XXXXXX)
4 temp2=$(mktemp -t test2.XXXXXX)
5
6 function diskspace
7 {
8 df -k > $temp
9 dialog --textbox $temp 20 80
10 }
11
12 function whoseon
13 {
14 who > $temp
15 dialog --textbox $temp 20 50
16 }
17
18 function menusage
19 {
20 cat /proc/meminfo > $temp
21 dialog --textbox $temp 20 50
22 }
23
24 while [ 1 ]
25 do
26 dialog --menu "sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display users" 3 "Display memory usage" 0 "Exit" 2> $temp2 # 输出值保存在temp2中
27 if [ $? -eq 1 ] # 获取退出状态码,如果失败(1)则退出。
28 then
29 break
30 fi
31
32 selection=$(cat $temp2)
33 case $selection in
34 1)
35 diskspace ;;
36 2)
37 whoseon ;;
38 3)
39 menusage ;;
40 0)
41 break ;;
42 *)
43 dialog --msgbox "Sorry,invalid selection" 10 30
44 esac
45 done
46
47 rm -f $temp 2> /dev/null
48 rm -f $temp2 2> /dev/null
总之,dialog就是一个命令(就会有退出状态码),可以接参数,也有输出。
18.3 使用图形
KDE和GNOME桌面环境都扩展了dialog命令的思路,包含了可以在各自环境下生成X windows图形化部件的命令。
18.3.1 KDE环境
KDE环境默认包含kdialog包。kdialog使用kdialog命令在KDE桌面上生成类似于dialog式部件的标准窗口
这个可能需要安装:sudo apt-get install kde-baseapps-bin
1. kdialog部件:kdialog命令使用命令行选择来指定具体使用哪种类型的窗口,后面再加上相应的参数。
例子:
$ kdialog --checklist "Item I need" 1 "Item1" on 2 "Item2" on 3 "Item3" on 4 "Item4" off
后面接on的表示高亮状态
kdialog命令会将每个标号作为一个字符串值返回到STDOUT中。(dialog是保存在STDERR中)
2.使用实例:(把之前的例子改一下)在脚本中使用kdialog
1 #!/bin/bash
2 # using kkdialog to create a menu
3 temp=$(mktemp -t test.XXXXXX)
4 temp2=$(mktemp -t test2.XXXXXX)
5
6 function diskspace
7 {
8 df -k > $temp
9 kdialog --textbox $temp 1000 20
10 }
11
12 function whoseon
13 {
14 who > $temp
15 kdialog --textbox $temp 500 10
16 }
17
18 function menusage
19 {
20 cat /proc/meminfo > $temp
21 kdialog --textbox $temp 300 500
22 }
23
24 while [ 1 ]
25 do
26 kdialog --menu "sys Admin Menu" "1" "Display disk space" "2" "Display users" "3" "Display memory usage" "0" "Exit" > $temp2
27 if [ $? -eq 1 ]
28 then
29 break
30 fi
31
32 selection=$(cat $temp2)
33 case $selection in
34 1)
35 diskspace ;;
36 2)
37 whoseon ;;
38 3)
39 menusage ;;
40 0)
41 break ;;
42 *)
43 kdialog --msgbox "Sorry,invalid selection" 10 30
44 esac
45 done
46
47 rm -f $temp 2> /dev/null
48 rm -f $temp2 2> /dev/null
18.3.2 GNOME环境
GNOME图形化支持两种流行的可生成标准窗口的包。
gdialog zenity
1. zenity部件
zenity允许用命令行选项创建不同的窗口部件。后面也是接部件名 再加参数
还提供了一些非常酷的高级对话窗口。
比如:
$ zenity –calendar
$zenity –file-selection
选择的结果也在STDOUT中。
实例:也是改之前那个
1 #!/bin/bash
2 # using kzenity to create a menu
3 temp=$(mktemp -t test.XXXXXX)
4 temp2=$(mktemp -t test2.XXXXXX)
5
6 function diskspace
7 {
8 df -k > $temp
9 echo "Disk space +++"
10 zenity --text-info --title "Disk space" --filename=$temp --width 800 --height 300
11 }
12
13 function whoseon
14 {
15 who > $temp
16 zenity --text-info --title "whoseon" --filename=$temp --width 800 --height 180
17 }
18
19 function menusage
20 {
21 cat /proc/meminfo > $temp
22 zenity --text-info --title "Memory usage" --filename=$temp --width 300 --height 800
23 }
24
25 while [ 1 ]
26 do
27 zenity --list --radiolist --title "sys Admin Menu" --column "select" --column "Menu Item" TRUE "Display disk space" FALSE "Display users" FALSE "Display memory usage" FALSE "Exit" > $temp2
28 if [ $? -eq 1 ]
29 then
30 break
31 fi
32
33 selection=$(cat $temp2)
34 case $selection in
35 "Display disk space")
36 diskspace ;;
37 "Display users")
38 whoseon ;;
39 "Display memory usage")
40 menusage ;;
41 "Exit")
42 break ;;
43 *)
44 zenity --info "Sorry,invalid selection" 10 30
45 esac
46 done
47
48 rm -f $temp 2> /dev/null
49 rm -f $temp2 2> /dev/null
《Linux命令行与shell脚本编程大全》第十八章 图形化桌面环境中的脚本编程的更多相关文章
- liunx中图形化桌面环境中的脚本编程之——创建文本菜单
整体是通过建立菜单布局,然后根据菜单上的布局建立函数(就是为这些布局实现功能),最后将函数和布局实现逻辑上的相连: 如何建立菜单布局? 整体上是通过打印字符创建出,因此需要使用echo命令,但是有一些 ...
- 《Linux命令行与shell脚本编程大全 第3版》
第一部分 Linux 命令行 第1章 初识Linux she1.1 什么是Linux 21.1.1 深入探究Linux 内核 31.1.2 GNU 工具 61.1.3 Linux 桌面环境 81 ...
- Linux命令行与shell脚本编程大全.第3版(文字版) 超清文字-非扫描版 [免积分、免登录]
此处免费下载,无需账号,无需登录,无需积分.收集自互联网,侵权通知删除. 点击下载:Linux命令行与shell脚本编程大全.第3版 (大小:约22M)
- 《Linux命令行与shell脚本编程大全 第3版》创建实用的脚本---11
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- 《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---47
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---57
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---57
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---56
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---55
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:
随机推荐
- hash在URL上的用法及作用
阅读目录 1. # 2. ? 3. & 回到顶部 1. # 10年9月,twitter改版.一个显著变化,就是URL加入了"#!"符号.比如,改版前的用户主页网址为http ...
- 购物篮算法的理解-基于R的应用
是无监督机器学习方法,用于知识发现,而非预测,无需事先对训练数据进行打标签,因为无监督学习没有训练这个步骤.缺点是很难对关联规则学习器进行模型评估,一般都可以通过肉眼观测结果是否合理. 一,概念术语 ...
- Redis 学习笔记-5种数据类型的基本操作
1.string类型 基本操作列表: GET 获取指定键对应的值 SET 设定键值 DEL 删除指定键对应的值(对所有数据类型都有效) > set hello world OK > get ...
- OOAD-设计模式(三)之创建型设计模式(5种)
前言 前面介绍了OOAD的基础知识,现在我们来详细的说明一下GOF设计模式中的23种模式,希望大家能够学到东西! 一.工厂方法模式(Factory Method) 1.1.工厂方法模式概述 工厂方法模 ...
- canvas绘制太阳系
原文地址:http://jeffzhong.space/2017/10/26/solar/ 学习canvas有一段时间了,顺便写个小项目练手,该项目用到的知识点包括: ES6面向对象 基本的三角函数 ...
- Windows下swoole扩展的编译安装部署
1. 到cygwin官网下载cygwin. 官网地址:https://www.cygwin.com/ 2. 打开下载好的cygwin安装包,开始安装cygwin. 选择cygwin的安装目录(这个同时 ...
- Unable to open debugger port (127.0.0.1:51554): java.net.SocketException "socket closed"
刚开始使用IDEA 总是有各种各样奇葩的问题 启动报错: Unable to open debugger port (127.0.0.1:51554): java.net.SocketExceptio ...
- HTML的语法
1,什么是HTML标记语言,他是表示网页信息的符号标记语言,特点包括: a,可以设置文本的格式,比如标题,文号,文本颜色,段落等待 b,可以简历列表 c,可以插入图像和媒体 d,可以建立表格 e,超连 ...
- 安装mayavi和VTK库的血泪史
一开始安装VTK库是从官网上下载,但是怎么都找不到whl文件,只有exe文件(vtkpython-7.1.1-Windows-64bit.exe).下载安装之后再PyCharm中import vtk出 ...
- javascript 之变量对象-09
变量对象 变量对象:每个执行环境(执行上下文)都有一个对应的变量对象(variable object),环境中(执行上下文中)定义的所有变量.函数都保存在这个对象中. 在上篇中说到,当执行流执行一个函 ...