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脚本编程大全》第十八章 图形化桌面环境中的脚本编程的更多相关文章

  1. liunx中图形化桌面环境中的脚本编程之——创建文本菜单

    整体是通过建立菜单布局,然后根据菜单上的布局建立函数(就是为这些布局实现功能),最后将函数和布局实现逻辑上的相连: 如何建立菜单布局? 整体上是通过打印字符创建出,因此需要使用echo命令,但是有一些 ...

  2. 《Linux命令行与shell脚本编程大全 第3版》

    第一部分 Linux 命令行 第1章  初识Linux she1.1   什么是Linux 21.1.1 深入探究Linux 内核 31.1.2 GNU 工具 61.1.3 Linux 桌面环境 81 ...

  3. Linux命令行与shell脚本编程大全.第3版(文字版) 超清文字-非扫描版 [免积分、免登录]

    此处免费下载,无需账号,无需登录,无需积分.收集自互联网,侵权通知删除. 点击下载:Linux命令行与shell脚本编程大全.第3版 (大小:约22M)

  4. 《Linux命令行与shell脚本编程大全 第3版》创建实用的脚本---11

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  5. 《Linux命令行与shell脚本编程大全 第3版》高级Shell脚本编程---47

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  6. 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---57

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  7. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---57

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  8. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---56

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  9. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---55

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

随机推荐

  1. UVa11212,Editing a Book

    正如书上所说,本题需要用IDA*算法求解 启发函数是3d+h>3maxd(d为当前操作步骤数,h为当前逆序对数,maxd为当前枚举的最大步骤数) 可见迭代递归的核心思想是枚举ans去dfs是否可 ...

  2. 【NOIP2016 Day1 T1】玩具谜题

    原题:https://www.luogu.org/problemnew/show/P1563 题目大意:有N个人围成一个圈,给定一串未化简的物品移动关系,要求你通过这些未化简的关系以及起始段的编号,求 ...

  3. Windows中 MySQL5.7.17解压版安装步骤

    1.先去MySQL官网下载.当前最新版是5.7.19,可能安装方法不同了,本人测试没有安装成功,若有安装成功的朋友,希望分享一下安装步骤. 个人推荐下载MySQL5.7.17,官方下载网址:https ...

  4. MongoDB聚合(count、distinct、group、MapReduce)

    1. count:返回集合中文档的数量. db.friend.count() db.friend.count({'age':24}) 增加查询条件会使count查询变慢. 2. distinct:找出 ...

  5. .xlsx文件总是默认用2007 Microsoft Office component 打开,且无法更改用EXCEL打开的解决方法

    之前装了OFFICE2003,后来改装了 OFFICE2007,之后XLSX文件双击总是用2007 Microsoft Office component 打开,导致无法打开. 解决方法: 打开注册表R ...

  6. C语言(记录)——内存相关_2:内存的编址与管理

    本文是基于嵌入式的C语言 --------------------------------------------------------------------------------------- ...

  7. 关于防止sql注入的几个知识点

    1.PDO预处理是首选. 你可以把他看成是要运行的sql的已经编译过的模板,它可以用变量参数进行定制 它有两个显著优点: 1.1:查询仅需解析一次,但可以用相同或者不同参数执行多次.换句话说如果要以不 ...

  8. MyEclipse下安装FatJar打包工具

    方法一:help > software updates > Find and install > add > add remote site name:FatJar url:h ...

  9. javaScript函数提升及作用域

    代码片段: var a = 1; function foo() { console.log(a); //输出为undefined if (!a) { var a = 2; } alert(a); }; ...

  10. C#截取当前活动窗体的图片

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...