显示数据

显示数据

12.1 了解输入和输出

12.1.1 标准文件描述符

       每个进程最多可以有9个打开文件的描述符。其中bash shell为特殊需要保留了前3个文件描述符012

       Linux标准文件描述符

文件描述符

缩写

描述

0

STDIN

标准输入

1

STDOUT

标准输出

2

STDERR

标准错误

比如ls –al test test1 test3 2> errorfile 1> outfile,将会把错误信息发送到errorfile文件中,输出信息发送到outfile文件中。当然也可以使用&>将所有信息发送到一个文件中。

12.2 在脚本中重定向输出

12.2.1 临时重定向

       在文件描述符编号前面加上&号,可以重定向到该文件描述符。例如:

echo “This is an error message” >&2

       我们可以看到输出到2的与STDOUT的没有什么区别,但是如果我们使用./test 2> errorfile就可以把错误消息发送到errorfile而只是输出STDOUT的信息。

12.2.2 永久重定向

exec 1> testout

exec 2>errorout

 

echo hello

echo world

echo error info >&2

此时执行就可以把所有的输出定向到testout中,因为exec命令为启动一个新的shell,并将STDOUT文件描述符重定向到一个文件,所有定向到STDOUT的脚本输出都将重定向到这个文件。而错误信息就会重定向到errorout中。

12.3 在脚本中重定向输入

       使用exec 0< testfile即可从文件testfile而不是STDIN中获取输入。

12.4 创建自己的重定向

创建读取/写入文件描述符

exec 3<>testfile

12.4.5 关闭文件描述符

exec 3>&-

12.5 列出开放文件描述符

       命令lsof列出整个Linux系统上所有的开放文件描述符。

12.6 禁止命令输出

       有事不希望显示任何脚本输出,可以将STDERR重定向到成为空文件null file的特殊文件/dev/null中,任何重定向到该位置的数据都将丢失且不会显示。

       例如ls –al > /dev/null将不显示任何信息。

12.7 使用临时文件

       Linux使用/tmp目录处理不需要永久保存的文件。

12.8 记录消息

       使用命令tee可以不用使用两次重定向而将输出同时发送到监视器和日志文件。

       例如$date | tee testfile

 

在脚本中添加颜色

在脚本中添加颜色

       原因是:shell脚本一直被认为是单调乏味的。

15.1 创建文本菜单

       创建交互式shell脚本最常见的方法是利用菜单。为用户提供各种选项有助于知道他们了解脚本的确切功能。

       Shell脚本菜单的核心是case命令,case命令根据用户在菜单中选择的字母执行特定的命令。

15.1.1 创建菜单布局

       命令echo仅显示可打印字符,所以,如果希望使用不可打印项,必须使用-e选项。

       命令read使用-n选项后,输入内容不需要按ENTER键。

比如:

#!/bin/bash

#create the munu layout

 

function menu

{

clear

echo

echo -e "\t\t\tSys Admin Menu\n"

echo -e "\t1.Display disk space"

echo -e "\t2.Display logged on users"

echo -e "\t3.Display memory usage"

echo -e "\t0.Exit program\n\n"

echo -en "\t\tEnter Option: "

 

read -n 1 option

}

 

function diskspace

{

       clear

       df -k

}

 

function whoseon

{

       clear

       who

}

 

function memusage

{

       clear

       cat /proc/meminfo

}

 

 

while [ 1 ]

do

       menu

       case $option in

       0)

              break;;

       1)

              diskspace;;

       2)

              whoseon;;

       3)

              memusage;;

       *)

              clear

              echo "Sorry, wrong selection";;

       esac

       echo -en "\n\n\t\t\tHit any key to continue"

       read -n 1 line

done

clear

15.1.5 使用select命令

       创建文本菜单的大多数问题就是创建菜单布局和获取输入的答案,bash shell提供了一个便利的小工具,可以自动完成所有这些工作。

       命令select允许从单命令行创建菜单,然后获取输入的答案并自动处理它。命令select的格式是:

select variable in list

do

       commands

done

       列表参数list是用空格隔开的构建菜单的文本项列表,select命令将列表中的每一项显示为一个编号选项,然后为选择显示一个特殊的提示符(由PS3环境变量定义)。

例如下面的这个示例:

#!/bin/bash

#using select in the menu

 

function diskspace

{

       clear

       df -k

}

 

function whoseon

{

       clear

       who

}

 

function memusage

{

       clear

       cat /proc/meminfo

}

 

 

PS3="Enter option: "

select option in "Display disk space" "Display logged on users" "Display memory usage" "Exit program"

do

       clear

       case $option in

       "Exit program")

              break;;

       "Display disk space")

              diskspace;;

       "Display logged on users")

              whoseon;;

       "Display memory usage")

              memusage;;

       *)

              clear

              echo "Sorry, wrong selection";;

       esac

done

clear

       有一点需要注意的是,存储在变量中的结果值是整个文本字符串,而不是与该菜单项相关联的数字。文本字符串值才是需要在case语句中比较的内容。

15.2 添加颜色

       目前有很多的终端模拟包,允许为交互式脚本添加颜色和特殊效果。

15.2.1 ANSI转义码

       大多数终端模拟软件能够识别设置显示输出格式的ANSI转义码。ANSI转义码以控制序列指示器(control sequence indicatorCSI)开头,后面跟表示要在显示器上执行的操作的数据。CSI告诉终端该数据表示一个转义码。

       要控制显示格式,必须使用选择图形再现(Select Graphic RenditionSGR)转义码,SGE转义码的格式为:

       CSIn[;k]m

       该代码中的m代表SGR转义码。nk参数定义所使用的显示控制。可以仅指定一个参数或者同时指定两个,中间用分号隔开。显示控制参数有3类:

l  效果控制代码;

l  前景色控制代码;

l  背景色控制代码;

ANSI SGR效果控制代码

代码

描述

代码

描述

0

重置为普通模式

4

使用单下划线(可以)

1

设置为强亮度(在bash中是加粗)

5

6

使用慢闪烁(没有反应)

使用快闪烁

2

设置为弱亮度(在bash中可以)

7

背景、前景颜色反转(可以)

3

使用斜体(这个在bash中不起作用)

8

将前景色设置为背景色(可以)

因此:要将显示设置为使用倾斜的字体,需要发送代码:

CSI3m

如果需要使用斜体和闪烁,可以发送代码:

CSI3;5m

       前景色控制码和背景色控制码都使用两位数代码。前景色使用3开头的一个两位数的值,而背景色使用4开头的两位数的值,其中的第二位数字表示具体颜色。

       ANSI颜色控制代码:

代码

颜色

代码

颜色

0

黑色

4

蓝色

1

红色

5

洋红色

2

绿色

6

青色

3

黄色

7

白色

因此,要指定白色前景,发送代码:

CSI37m

要设置背景色为黑色,前景色为红色,可以发送代码:

CSI31;40m

15.2.2 显示ANSI转义码

       上面所说的都可以使用echo命令发送,像发送普通文本一样,将ANSI转义码发送到终端会话。唯一比较难的部分是创建CSI字符。

       CSI字符通常是一个两字符序列,这个序列是ESC ASCII值,后跟左方括号字符。记住,输入方法为:Ctrl+V组合键后跟ESC。在输入此组合键时,字符^[出现。

       下面为两个例子:

clip_image002

       注意,在一个echo命令中放置两个转义控制码时,重要的是要用双引号将代码字符串引起来。如果没有双引号,echo命令就不能正确地解释转义码,进而产生错误消息。

15.2.3 在脚本中使用颜色

       将前面的shell脚本只需添加上一行颜色控制码。

clip_image004

#!/bin/bash

#create the munu layout

 

function menu

{

clear

echo

echo -e "\t\t\tSys Admin Menu\n"

echo -e "\t1.Display disk space"

echo -e "\t2.Display logged on users"

echo -e "\t3.Display memory usage"

echo -e "\t0.Exit program\n\n"

echo -en "\t\tEnter Option: "

 

read -n 1 option

}

 

function diskspace

{

       clear

       df -k

}

 

function whoseon

{

       clear

       who

}

 

function memusage

{

       clear

       cat /proc/meminfo

}

 

echo “^[[44;33m”

while [ 1 ]

do

       menu

       case $option in

       0)

              break;;

       1)

              diskspace;;

       2)

              whoseon;;

       3)

              memusage;;

       *)

              clear

              echo "Sorry, wrong selection";;

       esac

       echo -en "\n\n\t\t\tHit any key to continue"

       read -n 1 line

done

clear

15.3 制作窗口

       dialog软件包是一个较好的小工具,最初有Savio Lam设计,是一个可以和shell脚本配合使用的文本届面下的创建对话框的工具。

       常见的对话框空间选项:

常见的对话框控件选项有:

类型       用于创建类型的选项         

–calendar    提供了一个日历,让你可以选择日期

–checklist     允许你显示一个选项列表,每个选项都可以被单独的选择  (复选框)

–from       允许您建立一个带标签的文本字段,并要求填写

–fselect      提供一个路径,让你选择浏览的文件

–gauge    显示一个表,呈现出完成的百分比,就是显示出进度。

–infobox    显示消息后,(没有等待响应)对话框立刻返回,但不清除屏幕  (信息框)

–inputbox     让用户输入文本  (输入框  )

–inputmenu   提供一个可供用户编辑的菜单 (可编辑的菜单框)

–menu       显示一个列表供用户选择   (菜单框)

–msgbox    显示一条消息,并要求用户选择一个确定按钮 (消息框  )

–pause      显示一个表格用来显示一个指定的暂停期的状态

–passwordbox   显示一个输入框,它隐藏文本

–passwordfrom  显示一个来源于标签并且隐藏的文本字段

–radiolist      提供一个菜单项目组,只有一个项目,可以选择 (单选框)

–tailbox      在一个滚动窗口文件中使用tail命令来显示文本

–tailboxbg    tailbox类似,但是在background模式下操作

–textbox    在带有滚动条的文本框中显示文件的内容  (文本框)

–timebox   提供一个窗口,选择小时,分钟,秒

–yesno      提供一个带有yesno按钮的简单信息框  (/否框)

       要在命令行上具体制定一个特定的小部件,需要使用双破折号格式:

dialog –widget parameters

       其中的widget为上面所说的控件,parameters定义该小部件窗口的大小以及它所需要的任何文本。

       每个对话框小部件均以两种形式提供输出:

l  使用STDERR

l  使用退出代码状态;

dialog命令的退出状态决定用户所选择的按钮,如果选择OKYes按钮,该dialog命令将返回0退出状态;如果选择CancelNo按钮,返回1退出状态,可以使用标准$?变量确定在该对话框小部件中选择的按钮。

比如:

msgbox小部件

dialog – – title Testing – -msgbox “This is a test” 10 20

clip_image006

       此时的OK键是支持鼠标点击的,只是没有什么效果。

yesno小部件

dialog – -title “Please answer” – -yesno “is this thing on” 10 20

clip_image008

而对于inputbox小部件为用户输入文本字符串提供了一个简单的文本框。dialog命令将文本字符串的值发送到STDERR,所以必须重定向才能获取答案。例如:

输入框小部件

dialog – -inputbox “Enter your age” 10 20 2>age.txt

clip_image010

完成后,将会生成一个age.txt文件保存输入的27。此时我们可以再次重定向以使用该值。

文本框小部件

dialog – -textbox /etc/passwd 15 45

clip_image012

       可以使用方向键在文本文件中上下左右移动。

菜单小部件

       dialog  –menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display users" 3 "Display memory usage" 4 "Exit" 2>text.txt

clip_image014

       移动方向键可以高亮显示标记的条目,在输入OK后会将选择的条目tag发送到text.txt文件中。

fselect小部件

dialog – -title “Select a file” –fselect $HOME/ 10 50 2>file.txt

clip_image016

 

 

dialog选项

 

 

 

选项

描述

–add-widged

除非按EscCancel键,否则继续进入下一个对话框。

–aspect ratio

指定窗口宽度/高度的纵横比

backtitle  backtitle

指定backtitle字符串显示在背景下,在屏幕的顶部。

begin   x y

指定的位置在屏幕上的上一个对话框的左上角

–cancel-label label

Cancel按钮指定一个可供选择的标签

–clear

使用对话框默认背景色清除显示

colors

允许在对话框文本中潜入ANSI颜色代码

–cr-wrap

允许在对话框文本中加入换行符,强制换行

–create-rc file

转储样本配置文件至指定文件

defaultno

将默认值 yes/no对话框设置为使用no

default-item string

设置在一份清单,表格或菜单中的默认项目。通常在框中的第一项是默认

–exit-label label

Exit按钮指定一个可供选择的标签

–extra-button

OKCancel按钮之间,显示一个其他按钮

–extra-label label

extra按钮指定一个可供选择的标签

–help

显示dialog命令的帮助信息

–help-button

OKCancel按钮之后显示Help按钮

–help-label label

help按钮指定一个可供选择的标签

–help-status

help按钮中的帮助信息被选中后,记录下检查列表、单选框列表或表单信息

–ignore

忽略dialog不能识别的选项

–input-fd fd

STDIN之外,指定其他可供选择的文件描述符

insecure

输入部件的密码时,明文显示不安全,使用星号来代表每个字符,这样安全点

–item-help

在屏幕的底部,为检查列表、单选框列表、菜单中的每一个标签添加该标签的帮助

–keep-window

不要清除屏幕上的旧小部件

–max-input size

指定输入字符串的最大规模,默认为2048

nocancel

设置在输入框,菜单,和复选框中,禁止选cancel”

–no-collapse

在对话框文本中,不要将制表换行符转换为空格。

–no-kill

tailboxbg对话框放在背景中,并禁止该进程的SIGHUP

–no-label label

No按钮指定一个可供选择的标签

no-shadow

禁止阴影出现在每个对话框的底部

ok-label  string

覆盖使用OK按钮的标签

–output-fd fd

STDERR之外,指定其他可供选择的文件描述符

–print-maxsize

打印对话框窗口允许输出的最大尺寸

–print-size

将每个对话框窗口的尺寸打印至输出

–print-version

将对话框版本打印至输出

–separator-output

无需引用,将checklist小部件的结果一次一行的输出

–separator string

指定一个字符串来隔离每个小部件的输出

–separator-widget string

指定一个字符串来隔离每个小部件的输出

–shadow

绘制阴影至每一个窗口的右下方

–single-quoted

需要时对检查列表输出使用单引用

–sleep sec

在处理对话框窗口后延迟指定的秒数

–stderr

将输出发送至STDERR,这是默认行为

–stdout

将输出发送至STDOUT

–tab-correct

将换行符转换为空格

–tab-len n

指定一个制表符所使用的空格数,默认为8

timeout  secs

超时(返回的错误代码),如果用户在指定的时间内没有给出相应

title  title

指定将在对话框的上方显示的标题字符串

–trim

删除对话框文本中字符串首部的空格和换行符

–visit-items

为了把项目列表包含在内,而修改对话框窗口中的制表符

–yes-label label

yes按钮指定一个可供选择的标签

其中的backtitle  backtitle选项是创建贯穿脚本的通用菜单标题的一种十分方便的方法。如果为每个对话框窗口置顶,该选项将贯穿应用程序始终,为脚本创建专业级的外观。

 

在脚本中使用dialog命令

       在脚本中使用dialog命令时一件非常容易的事情。只需要记住两点:

l  如果CancelNo按钮可用,请检查dialog命令的退出状态;

l  重定向STDERR以获取输出值

如果遵循上面的两条规则,就可以立即获得专业外观的交互式脚本。例如:

clip_image018

#!/bin/bash

#using dialog to create a menu

 

temp=`mktemp -t test.XXXXXX`

temp2=`mktemp -t test2.XXXXXX`

 

function diskspace

{

       #clear

       df -k > $temp

       dialog –textbox $temp 20 60

}

 

function whoseon

{

       #clear

       who > $temp

       dialog –textbox $temp 20 50

}

 

function memusage

{

       #clear

       cat /proc/meminfo > $temp

       dialog –textbox $temp 20 50

}

 

 

while [ 1 ]

do

       dialog –menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display logged on users" 3 "Display memory usage" 0 "Exit program" 2>$temp2

 

if [ $? -eq 1 ]

then

       break

fi

selection=`cat $temp2`

 

       case $selection in

       0)

              break;;

       1)

              diskspace;;

       2)

              whoseon;;

       3)

              memusage;;

       *)

              dialog –msgbox "Sorry, wrong selection" 10 30

       esac

done

rm -f $temp 2>/dev/null

rm -f $temp2 2>/dev/null

       其中temp用于保存各个命令的输出,temp2保存在主菜单对话框中选择的值。

15.4 获取图形

       KDEGNOME桌面环境都扩充了dialog命令的思想,在各自环境中包含了生成X Windows图形小部件的命令。

       比如KDE使用kdialog,而GNOME使用gdialogzenity

15.4.1 KDE环境

       KDE图形环境默认包括kdialog软件包,在KDE桌面环境下,kdialog软件包使用kdialog命令生成标准窗口,类似对话类型的小部件。这使您可以直接在shell脚本中创建Windows质量的用户界面。

       注意kdialogdialog最大的区别是,kdialog窗口小部件使用STDOUT而非STDERR输出值。

clip_image020

 

clip_image022

clip_image024

clip_image026

#!/bin/bash

#using kdialog to create a menu

 

temp=`mktemp -t test.XXXXXX`

temp2=`mktemp -t test2.XXXXXX`

 

function diskspace

{

       #clear

       df -k > $temp

       kdialog –textbox $temp 1000 10

}

 

function whoseon

{

       #clear

       who > $temp

       kdialog –textbox $temp 500 10

}

 

function memusage

{

       #clear

       cat /proc/meminfo > $temp

       kdialog –textbox $temp 300 500

}

 

 

while [ 1 ]

do

       kdialog –menu "Sys Admin Menu" "1" "Display disk space" "2" "Display logged on users" "3" "Display memory usage" "0" "Exit program" >$temp2

 

if [ $? -eq 1 ]

then

       break

fi

selection=`cat $temp2`

 

       case $selection in

       1)

              diskspace;;

       2)

              whoseon;;

       3)

              memusage;;

       0)

              break;;

       *)

              kdialog –msgbox "Sorry, wrong selection"

       esac

done

15.4.2 GNOME环境

       GNOME图形化环境支持两种可以生成标准窗口的流行软件包。

l  gdialog

l  zenity

到目前为止,大多数GNOME桌面中,zenity是最常见的软件包。

clip_image028clip_image030

clip_image032

#!/bin/bash

#using zenity to create a menu

 

temp=`mktemp -t test.XXXXXX`

temp2=`mktemp -t test2.XXXXXX`

 

function diskspace

{

       #clear

       df -k > $temp

       zenity –text-info –title "Disk space" –filename=$temp  –width 750 –height 10

}

 

function whoseon

{

       #clear

       who > $temp

       zenity –text-info –title "Logged in users" –filename=$temp  –width 500 –height 10

#    zenity –text-info $temp 20 50

}

 

function memusage

{

       #clear

       cat /proc/meminfo > $temp

       zenity –text-info –title "Memory usage" –filename=$temp  –width 300 –height 500

       zenity –text-info $temp 20 50

}

 

 

while [ 1 ]

do

       zenity –list –radiolist –title "Sys Admin Menu" –column "Select" –column "Menu Item" FALSE "Display disk space" FALSE "Display logged on users" FALSE "Display memory usage" FALSE "Exit program" >$temp2

 

if [ $? -eq 1 ]

then

       break

fi

selection=`cat $temp2`

 

       case $selection in

       "Exit")

              break;;

       "Display disk space")

              diskspace;;

       "Display users")

              whoseon;;

       "Display memory usage")

              memusage;;

       *)

              zenity –info "Sorry, invalid selection"

       esac

done

       使用zenity软件包,可以在GNOME桌面上,为交互式shell脚本增加Windows的感觉。

日历的区别:

Kdialog

clip_image034

Zenity

clip_image036

 

sed和gawk介绍

sedgawk介绍

16.1 文本处理

当你需要动态地处理文本文件中的文本,而不必使用完备的交互式文本编辑器。在这些情况下,拥有一个能够方便地格式化、插入、修改或删除文本元素的简单命令行编辑器就很有用。

16.1.1 sed编辑器

       sed编辑器称为流编辑器(stream editor),与普通的交互式文本编辑器相对应。在交互式文本编辑器(例如vim或者emacs)中,可以交互地使用键盘命令插入、删除、或者替换数据中的文本。而流编辑器则可以根据在编辑器处理数据之前实现提供的规则集编辑数据流。

       sed编辑器可以根据输入命令行的命令或者存储在命令文本文件中的命令处理数据。它每次从输入中读取一行数据,将该数据与所提供的编辑器命令进行匹配,根据命令修改数据流中的文件,然后将新数据输出到STDOUT。在流编辑器将全部命令和一行数据匹配完以后,它会读取下一行数据,并重复上述过程,直到处理完所有的数据。

       由于是按顺序逐行应用命令,所以sed编辑器进行编辑仅需浏览数据流一次。这使得sed编辑器比交互式编辑器要快很多,因而可以动态地快速修改文件中的数据。

       脚本中,如果需要多个命令,那么应该加上-e选项,或者使用-f选项在单独的文件中指定。

       默认情况下,sed编辑器将指定的命令应用于STDIN输入流,这就允许将数据直接管道传送给sed编辑器处理。

       注意,sed编辑器并不修改文本文件中的数据,它只是将修改后的文本发送到STDOUT。所以此时我们就需要重定向。

16.1.2 gawk程序

       尽管sed编辑器是动态修改文本文件的便利工具,但是也有自己的局限性。通常,我们需要更高级(所以高下立分)的工具来处理文件中的数据,一个能够提供类似于编程环境的工具,它允许修改和重新组织文件中的数据,这正式gawk的特长。

       程序gawkUnix中原awkGNU版本。awk程序在流编辑方便比sed编辑器更先进的是:它提供了一种编程语言而不仅仅是编辑器命令行。在编程语言内部,可以:

l  定义要保存数据的变量;

l  使用算术和字符串操作符对数据进行运算;

l  使用结构化编程概念,例如if-then语句和循环,将逻辑添加到数据处理过程;

l  通过从数据文件内抽取数据元素以及按照其他顺序或格式对它们重定位,生成带格式的报告。

gawk程序的报告生成能力常用于从大文本文件中抽取数据元素,并将其格式化为易读的报告。这方面的一个完美示例是格式化日志文件

gawk程序的基本格式是:

gawk options program file

       gawk的威力在程序脚本中。可以编写脚本读取一个文本行中的数据,然后处理并显示这些数据,以创建任意类型的输出报告。

       Gawk程序脚本由左大括号和右大括号定义。脚本命令必须放置在两个大括号之间。由于gawk命令行假定脚本是单文本字符串,所以必须将脚本放在单引号内

       要结束gawk程序,必须信号说明数据流已经结束。Bash shell提供了生成End-of-FileEOF)字符的组合键,使用CTRL+D即可使gawk程序结束。

       Gawk使用$0表示整行文本,$1表示文本行中的第一个数据字段;

       各个数据段依据文本行中的字段分隔符(field separation character)确定。字段分隔符可以使用-F参数指定;

       如果要在命令行中使用多个命令,只需要在各命令之间加上一个分号即可;

       Gawk程序还允许指定运行脚本的时间,可以使用BEGIN关键字,来强制gawk在读取数据之前,执行BEGIN关键字之后指定的程序脚本;同样也可以使用END关键字指定在读取数据之后gawk执行程序脚本。

       比如:gawk_use_BEGIN_END.sh内容为:

BEGIN{

print "The laster list of users and shells"

print "Userid            Shell"

print "——-          ——-"

FS=":"

}

 

{

print $1 "            " $7

}

 

END{

print "This concludes the listing"

}

clip_image002 clip_image004

       这个脚本内容使用BEGIN创建了报告的标题部分,END创建了报告的结束。

16.2 sed编辑器基础知识

16.2.1 更多替换选项

       Sed的替换命令默认情况下仅替换各行中首次出现的文本,要使替换命令继续替换之后出现的文本,则必须使用替换标记(substitution flag),替换标记要放在替换命令字符串之后:

       s/pattern/replacement/flags

可用的替换标记有4中:

l  数字:表示新文本替换的模式,如果是2表示替换第二次出现的模式;

l  g:表示用新文本替换现有文本的全部实例;

l  p:表示打印原始行的内容;

l  w file:表示将替换的结果写入文件;

p替换标记会打印包含替换命令中匹配模式的那一行,经常和-n sed选项一起使用。-n选项禁止sed编辑器的输出,然而,p替换标记会输出所有已修改的行。两者结合使用仅仅生成替换命令已更改的输出。

还要注意正斜杠在使用的时候需要使用反斜杠进行转移,但是,如果是/usr/bin/ls加上N多的正斜杠会让人看着不是很命令,此时可以使用一个感叹号作为定界符,例如:

sed ‘s!/bin/bash!/bin/csh!’ /etc/passwd

16.2.2 使用地址

       默认情况下,在sed编辑器中使用的命令应用于所有的文本数据行,如果仅想将某个命令应用于某一特定的文本数据行或一组文本数据行,则必须使用行寻址(line addressing)。

       sed编辑器中,有两种行寻址形式:

l  行的数值范围;

l  筛选行的文本模式;使用pattern来搜索

$表示从某一点直到文本结束的一组文本行。

       当然对于上面的匹配模式,所能完成的功能有点受限,sed编辑器允许使用正则表达式功能创建复杂的文本模式。

       正则表达式允许创建高级文本模式匹配公式来匹配各种类型的数据。这些公式可以组合一系列通配符、特殊字符以及固定的文本符号,形成能够匹配几乎所有文本情况的简明模式。所以所有的代价就是正则表达式是shell脚本编程中非常复杂的一部分。

16.2.3 删除行

       文本替换命令不是sed编辑器可用的唯一命令,如果需要删除文本流中特定的文本行,还有一个删除命令,删除命令d完成的功能即为删除。

       不过要记住sed编辑器不会处理原始文件,所删除的所有文本行仅从sed编辑器的输出中删除了,原始文件仍然包含这些已经删除的行。

16.2.4 插入和附加文本

       插入命令i在指定行之前添加新的一行;

       附加命令a在指定行之后添加新的一行;

不能在但命令行上使用这两个命令,必须单独指定要插入和附加的行:实现这一个功能的格式为:

sed ‘[address]command\

new line’

and使用这些命令时,只可以指定一行地址,可以与某一数字行号或文本模式匹配,但不能使用地址范围,因为只能在某一行而不是某一范围前或后插入或附加。

16.2.6 变换命令

       变换命令y是唯一对单个字符进行操作的sed编辑器命令,这个相当的clip_image005呀。

命令格式为:[address]y/inchars/outchars/

       注意替换方式为假设为y/123/456/,那么4替换1,5替换26替换3。替换命令是全局命令,也就是说,它自动对在文本行中发现的任意字符进行变换,而不管其是第几次出现。

16.3 小结

       进入shell脚本可以独立完成许多工作,但是仅仅使用shell脚本很那处理数据,所以这里我们可以使用sedgawk

 

正则表达式

正则表达式

       shell脚本中成功地使用sed编辑器和gawk程序的关键是自如地使用正则表达式。

17.1 正则表达式是什么

17.1.1 正则表达式的定义

       正则表达式是您定义的、Linux使用程序用来筛选文本的模式模板。

       正则表达式包括文本和(或特殊字符。)

17.1.2 正则表达式的类型

       正则表达式可以使用正则表达式引擎(regular expressing engine)实现。正则表达式引擎室解释正则表达式模式并使用这些模式匹配文本的基础软件。

       Linux世界中,常用的正则表达式引擎有两种:

l  POSIX基本正则表达式(BRE)引擎;

l  POSIX扩展正则表达式(ERE)引擎;

17.2 定义BRE模式     

17.2.1 纯文本

正则表达式并不关心模式出现在数据流中的位置。模式出现的次数也无关紧要。一旦正则表达式能够在文本字符串的任何位置匹配该模式,它就将字符串传递给使用它的Linux实用程序。

       注意正则表达式模式区分大小写。

       在正则表达式中,不必局限于完整的单词,也可以使单词的局部,也可以包含空格和数字。

17.2.2 特殊字符

       正则表达式认可的特殊字符有:

.*[]^${}\+?()

       如果需要使用这些特殊字符中的一个作为文本字符,需要转义它。转义特殊字符时,需要在特殊字符的前面添加一个特殊字符(\),向正则表达式引擎说明,它应该将下一个字符解释为普通文本字符。

17.2.3 定位符

       退字符^定义从数据流中文本行开始的模式,如果该模式位于文本行的其他任意位置,正则表达式失败;美元符号$特殊字符定义结尾定位。所以我们可以使用sed ‘/^$/d’ file来删除file中的空行。

17.2.4 点字符

       点特殊字符用于匹配除换行符之外的任何单个字符。

17.2.5 字符类

       可以定义一类字符来匹配文本模式中的某一位置。如果该字符类中的字符之一在数据流中,它就和模式匹配。

       为定义字符类,要使用方括号。比如sed –n ‘/[ch]at/p’ data,可以匹配hat或者cat。比较常用的比如yes/Yes/yES/YES等等。

       如果需要精确地匹配有几位,可以使用行首^和行尾$来界定。

17.2.6 否定字符类

       不是查找字符类中包含的字符,而是查找不在该字符类中的字符。为此,只需要在字符类范围的开头添加脱字符即可。例如:sed –n ‘/[^ch]at/p’ data

17.2.7 使用范围

       通过使用短划线符号可以在字符类中使用一系列字符范围。例如,可以通过制定数字的范围来简化邮政编码示例:

sed –n ‘/^[0-9] [0-9] [0-9] [0-9] [0-9] [0-9]$/p’,其中的[0-9]就表示0910个数字。

       还可以再单个字符类中指定多个非连续的范围:

sed –n ‘/[c-hx-z]at/p’ data

17.2.8 特殊字符类

描述

[[:alpha:]]

匹配任意字母字符,大写或者小写

[[:alnum:]]

匹配任意字母数字

[[:blank:]]

匹配空格或者制表符字符

[[:digit:]]

匹配0-9的数字

[[:lower:]]

匹配任意小写字母字符

[[:print:]]

匹配任意可打印字符

[[:punct:]]

匹配标点符号punctuation

[[:space:]]

匹配任意空白字符:空格、制表符、NL(另起一行)、FF(换页)、VTCR

[[:upper:]]

匹配任意大写字母字符

17.2.9 星号

在某个字符之后加一个星号表示该字符必须在匹配模式的文本中不出现或出现多次。

       该模式符号常用于处理语言拼写中常见的错误拼写或变化的单词。

17.3 扩展的正则表达式

       gawk可以识别ERE模式,但是sed编辑器不能。Gawk程序可以使用大部分扩展正则表达式的符号,并且具有sed编辑器没有的其他一些筛选能力,但是,正是由于这一点,它处理数据流的速度通常较慢。

17.3.1 问号

       问号和星号相似,但是略有变化。问号表示其前面的字符可以不出现或者出现一次,但只能这样,它不匹配重复出现的字符。

17.3.2 加号

       加号表示其前面的字符可以出现一次或多次,但是必须至少一次

17.3.3 使用大括号

       使用大括号制定对可重复的正则表达式的限制。这通常称为间隔interval。可以使用两种格式表示间隔:

l  m:该正则表达式正好出现m次;

l  m,n:该正则表达式出现最少m次,最多n次。

默认情况下,gawk程序不能识别正则表达式间隔,必须制定—re—interval命令行选项,以便gawk程序识别正则表达式间隔。

17.3.4 管道符号

       管道符号允许你用逻辑OR公式指定正则表达式检查数据流时使用的两个或多个模式。

17.3.5 将表达式分组

       正则表达式可以使用圆括号分组,在将正则表达式模式分组时,一个组合将作为一个标准字符处理。比如echo “Sat” | gawk ‘Sat(urdau)?{print  $0}’

17.4 正则表达式实战

解析电子邮件地址

^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$

17.5 小结

       目前两个最流行的正则表达式中:sed编辑器主要与BRE引擎一致,而gawk程序可以利用ERE引擎的大多数功能。

在脚本中添加颜色

在脚本中添加颜色

       原因是:shell脚本一直被认为是单调乏味的。

15.1 创建文本菜单

       创建交互式shell脚本最常见的方法是利用菜单。为用户提供各种选项有助于知道他们了解脚本的确切功能。

       Shell脚本菜单的核心是case命令,case命令根据用户在菜单中选择的字母执行特定的命令。

15.1.1 创建菜单布局

       命令echo仅显示可打印字符,所以,如果希望使用不可打印项,必须使用-e选项。

       命令read使用-n选项后,输入内容不需要按ENTER键。

比如:

#!/bin/bash

#create the munu layout

 

function menu

{

clear

echo

echo -e "\t\t\tSys Admin Menu\n"

echo -e "\t1.Display disk space"

echo -e "\t2.Display logged on users"

echo -e "\t3.Display memory usage"

echo -e "\t0.Exit program\n\n"

echo -en "\t\tEnter Option: "

 

read -n 1 option

}

 

function diskspace

{

       clear

       df -k

}

 

function whoseon

{

       clear

       who

}

 

function memusage

{

       clear

       cat /proc/meminfo

}

 

 

while [ 1 ]

do

       menu

       case $option in

       0)

              break;;

       1)

              diskspace;;

       2)

              whoseon;;

       3)

              memusage;;

       *)

              clear

              echo "Sorry, wrong selection";;

       esac

       echo -en "\n\n\t\t\tHit any key to continue"

       read -n 1 line

done

clear

15.1.5 使用select命令

       创建文本菜单的大多数问题就是创建菜单布局和获取输入的答案,bash shell提供了一个便利的小工具,可以自动完成所有这些工作。

       命令select允许从单命令行创建菜单,然后获取输入的答案并自动处理它。命令select的格式是:

select variable in list

do

       commands

done

       列表参数list是用空格隔开的构建菜单的文本项列表,select命令将列表中的每一项显示为一个编号选项,然后为选择显示一个特殊的提示符(由PS3环境变量定义)。

例如下面的这个示例:

#!/bin/bash

#using select in the menu

 

function diskspace

{

       clear

       df -k

}

 

function whoseon

{

       clear

       who

}

 

function memusage

{

       clear

       cat /proc/meminfo

}

 

 

PS3="Enter option: "

select option in "Display disk space" "Display logged on users" "Display memory usage" "Exit program"

do

       clear

       case $option in

       "Exit program")

              break;;

       "Display disk space")

              diskspace;;

       "Display logged on users")

              whoseon;;

       "Display memory usage")

              memusage;;

       *)

              clear

              echo "Sorry, wrong selection";;

       esac

done

clear

       有一点需要注意的是,存储在变量中的结果值是整个文本字符串,而不是与该菜单项相关联的数字。文本字符串值才是需要在case语句中比较的内容。

15.2 添加颜色

       目前有很多的终端模拟包,允许为交互式脚本添加颜色和特殊效果。

15.2.1 ANSI转义码

       大多数终端模拟软件能够识别设置显示输出格式的ANSI转义码。ANSI转义码以控制序列指示器(control sequence indicatorCSI)开头,后面跟表示要在显示器上执行的操作的数据。CSI告诉终端该数据表示一个转义码。

       要控制显示格式,必须使用选择图形再现(Select Graphic RenditionSGR)转义码,SGE转义码的格式为:

       CSIn[;k]m

       该代码中的m代表SGR转义码。nk参数定义所使用的显示控制。可以仅指定一个参数或者同时指定两个,中间用分号隔开。显示控制参数有3类:

l  效果控制代码;

l  前景色控制代码;

l  背景色控制代码;

ANSI SGR效果控制代码

代码

描述

代码

描述

0

重置为普通模式

4

使用单下划线(可以)

1

设置为强亮度(在bash中是加粗)

5

6

使用慢闪烁(没有反应)

使用快闪烁

2

设置为弱亮度(在bash中可以)

7

背景、前景颜色反转(可以)

3

使用斜体(这个在bash中不起作用)

8

将前景色设置为背景色(可以)

因此:要将显示设置为使用倾斜的字体,需要发送代码:

CSI3m

如果需要使用斜体和闪烁,可以发送代码:

CSI3;5m

       前景色控制码和背景色控制码都使用两位数代码。前景色使用3开头的一个两位数的值,而背景色使用4开头的两位数的值,其中的第二位数字表示具体颜色。

       ANSI颜色控制代码:

代码

颜色

代码

颜色

0

黑色

4

蓝色

1

红色

5

洋红色

2

绿色

6

青色

3

黄色

7

白色

因此,要指定白色前景,发送代码:

CSI37m

要设置背景色为黑色,前景色为红色,可以发送代码:

CSI31;40m

15.2.2 显示ANSI转义码

       上面所说的都可以使用echo命令发送,像发送普通文本一样,将ANSI转义码发送到终端会话。唯一比较难的部分是创建CSI字符。

       CSI字符通常是一个两字符序列,这个序列是ESC ASCII值,后跟左方括号字符。记住,输入方法为:Ctrl+V组合键后跟ESC。在输入此组合键时,字符^[出现。

       下面为两个例子:

clip_image002

       注意,在一个echo命令中放置两个转义控制码时,重要的是要用双引号将代码字符串引起来。如果没有双引号,echo命令就不能正确地解释转义码,进而产生错误消息。

15.2.3 在脚本中使用颜色

       将前面的shell脚本只需添加上一行颜色控制码。

clip_image004

#!/bin/bash

#create the munu layout

 

function menu

{

clear

echo

echo -e "\t\t\tSys Admin Menu\n"

echo -e "\t1.Display disk space"

echo -e "\t2.Display logged on users"

echo -e "\t3.Display memory usage"

echo -e "\t0.Exit program\n\n"

echo -en "\t\tEnter Option: "

 

read -n 1 option

}

 

function diskspace

{

       clear

       df -k

}

 

function whoseon

{

       clear

       who

}

 

function memusage

{

       clear

       cat /proc/meminfo

}

 

echo “^[[44;33m”

while [ 1 ]

do

       menu

       case $option in

       0)

              break;;

       1)

              diskspace;;

       2)

              whoseon;;

       3)

              memusage;;

       *)

              clear

              echo "Sorry, wrong selection";;

       esac

       echo -en "\n\n\t\t\tHit any key to continue"

       read -n 1 line

done

clear

15.3 制作窗口

       dialog软件包是一个较好的小工具,最初有Savio Lam设计,是一个可以和shell脚本配合使用的文本届面下的创建对话框的工具。

       常见的对话框空间选项:

常见的对话框控件选项有:

类型       用于创建类型的选项         

–calendar    提供了一个日历,让你可以选择日期

–checklist     允许你显示一个选项列表,每个选项都可以被单独的选择  (复选框)

–from       允许您建立一个带标签的文本字段,并要求填写

–fselect      提供一个路径,让你选择浏览的文件

–gauge    显示一个表,呈现出完成的百分比,就是显示出进度。

–infobox    显示消息后,(没有等待响应)对话框立刻返回,但不清除屏幕  (信息框)

–inputbox     让用户输入文本  (输入框  )

–inputmenu   提供一个可供用户编辑的菜单 (可编辑的菜单框)

–menu       显示一个列表供用户选择   (菜单框)

–msgbox    显示一条消息,并要求用户选择一个确定按钮 (消息框  )

–pause      显示一个表格用来显示一个指定的暂停期的状态

–passwordbox   显示一个输入框,它隐藏文本

–passwordfrom  显示一个来源于标签并且隐藏的文本字段

–radiolist      提供一个菜单项目组,只有一个项目,可以选择 (单选框)

–tailbox      在一个滚动窗口文件中使用tail命令来显示文本

–tailboxbg    tailbox类似,但是在background模式下操作

–textbox    在带有滚动条的文本框中显示文件的内容  (文本框)

–timebox   提供一个窗口,选择小时,分钟,秒

–yesno      提供一个带有yesno按钮的简单信息框  (/否框)

       要在命令行上具体制定一个特定的小部件,需要使用双破折号格式:

dialog –widget parameters

       其中的widget为上面所说的控件,parameters定义该小部件窗口的大小以及它所需要的任何文本。

       每个对话框小部件均以两种形式提供输出:

l  使用STDERR

l  使用退出代码状态;

dialog命令的退出状态决定用户所选择的按钮,如果选择OKYes按钮,该dialog命令将返回0退出状态;如果选择CancelNo按钮,返回1退出状态,可以使用标准$?变量确定在该对话框小部件中选择的按钮。

比如:

msgbox小部件

dialog – – title Testing – -msgbox “This is a test” 10 20

clip_image006

       此时的OK键是支持鼠标点击的,只是没有什么效果。

yesno小部件

dialog – -title “Please answer” – -yesno “is this thing on” 10 20

clip_image008

而对于inputbox小部件为用户输入文本字符串提供了一个简单的文本框。dialog命令将文本字符串的值发送到STDERR,所以必须重定向才能获取答案。例如:

输入框小部件

dialog – -inputbox “Enter your age” 10 20 2>age.txt

clip_image010

完成后,将会生成一个age.txt文件保存输入的27。此时我们可以再次重定向以使用该值。

文本框小部件

dialog – -textbox /etc/passwd 15 45

clip_image012

       可以使用方向键在文本文件中上下左右移动。

菜单小部件

       dialog  –menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display users" 3 "Display memory usage" 4 "Exit" 2>text.txt

clip_image014

       移动方向键可以高亮显示标记的条目,在输入OK后会将选择的条目tag发送到text.txt文件中。

fselect小部件

dialog – -title “Select a file” –fselect $HOME/ 10 50 2>file.txt

clip_image016

 

 

dialog选项

 

 

 

选项

描述

–add-widged

除非按EscCancel键,否则继续进入下一个对话框。

–aspect ratio

指定窗口宽度/高度的纵横比

backtitle  backtitle

指定backtitle字符串显示在背景下,在屏幕的顶部。

begin   x y

指定的位置在屏幕上的上一个对话框的左上角

–cancel-label label

Cancel按钮指定一个可供选择的标签

–clear

使用对话框默认背景色清除显示

colors

允许在对话框文本中潜入ANSI颜色代码

–cr-wrap

允许在对话框文本中加入换行符,强制换行

–create-rc file

转储样本配置文件至指定文件

defaultno

将默认值 yes/no对话框设置为使用no

default-item string

设置在一份清单,表格或菜单中的默认项目。通常在框中的第一项是默认

–exit-label label

Exit按钮指定一个可供选择的标签

–extra-button

OKCancel按钮之间,显示一个其他按钮

–extra-label label

extra按钮指定一个可供选择的标签

–help

显示dialog命令的帮助信息

–help-button

OKCancel按钮之后显示Help按钮

–help-label label

help按钮指定一个可供选择的标签

–help-status

help按钮中的帮助信息被选中后,记录下检查列表、单选框列表或表单信息

–ignore

忽略dialog不能识别的选项

–input-fd fd

STDIN之外,指定其他可供选择的文件描述符

insecure

输入部件的密码时,明文显示不安全,使用星号来代表每个字符,这样安全点

–item-help

在屏幕的底部,为检查列表、单选框列表、菜单中的每一个标签添加该标签的帮助

–keep-window

不要清除屏幕上的旧小部件

–max-input size

指定输入字符串的最大规模,默认为2048

nocancel

设置在输入框,菜单,和复选框中,禁止选cancel”

–no-collapse

在对话框文本中,不要将制表换行符转换为空格。

–no-kill

tailboxbg对话框放在背景中,并禁止该进程的SIGHUP

–no-label label

No按钮指定一个可供选择的标签

no-shadow

禁止阴影出现在每个对话框的底部

ok-label  string

覆盖使用OK按钮的标签

–output-fd fd

STDERR之外,指定其他可供选择的文件描述符

–print-maxsize

打印对话框窗口允许输出的最大尺寸

–print-size

将每个对话框窗口的尺寸打印至输出

–print-version

将对话框版本打印至输出

–separator-output

无需引用,将checklist小部件的结果一次一行的输出

–separator string

指定一个字符串来隔离每个小部件的输出

–separator-widget string

指定一个字符串来隔离每个小部件的输出

–shadow

绘制阴影至每一个窗口的右下方

–single-quoted

需要时对检查列表输出使用单引用

–sleep sec

在处理对话框窗口后延迟指定的秒数

–stderr

将输出发送至STDERR,这是默认行为

–stdout

将输出发送至STDOUT

–tab-correct

将换行符转换为空格

–tab-len n

指定一个制表符所使用的空格数,默认为8

timeout  secs

超时(返回的错误代码),如果用户在指定的时间内没有给出相应

title  title

指定将在对话框的上方显示的标题字符串

–trim

删除对话框文本中字符串首部的空格和换行符

–visit-items

为了把项目列表包含在内,而修改对话框窗口中的制表符

–yes-label label

yes按钮指定一个可供选择的标签

其中的backtitle  backtitle选项是创建贯穿脚本的通用菜单标题的一种十分方便的方法。如果为每个对话框窗口置顶,该选项将贯穿应用程序始终,为脚本创建专业级的外观。

 

在脚本中使用dialog命令

       在脚本中使用dialog命令时一件非常容易的事情。只需要记住两点:

l  如果CancelNo按钮可用,请检查dialog命令的退出状态;

l  重定向STDERR以获取输出值

如果遵循上面的两条规则,就可以立即获得专业外观的交互式脚本。例如:

clip_image018

#!/bin/bash

#using dialog to create a menu

 

temp=`mktemp -t test.XXXXXX`

temp2=`mktemp -t test2.XXXXXX`

 

function diskspace

{

       #clear

       df -k > $temp

       dialog –textbox $temp 20 60

}

 

function whoseon

{

       #clear

       who > $temp

       dialog –textbox $temp 20 50

}

 

function memusage

{

       #clear

       cat /proc/meminfo > $temp

       dialog –textbox $temp 20 50

}

 

 

while [ 1 ]

do

       dialog –menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display logged on users" 3 "Display memory usage" 0 "Exit program" 2>$temp2

 

if [ $? -eq 1 ]

then

       break

fi

selection=`cat $temp2`

 

       case $selection in

       0)

              break;;

       1)

              diskspace;;

       2)

              whoseon;;

       3)

              memusage;;

       *)

              dialog –msgbox "Sorry, wrong selection" 10 30

       esac

done

rm -f $temp 2>/dev/null

rm -f $temp2 2>/dev/null

       其中temp用于保存各个命令的输出,temp2保存在主菜单对话框中选择的值。

15.4 获取图形

       KDEGNOME桌面环境都扩充了dialog命令的思想,在各自环境中包含了生成X Windows图形小部件的命令。

       比如KDE使用kdialog,而GNOME使用gdialogzenity

15.4.1 KDE环境

       KDE图形环境默认包括kdialog软件包,在KDE桌面环境下,kdialog软件包使用kdialog命令生成标准窗口,类似对话类型的小部件。这使您可以直接在shell脚本中创建Windows质量的用户界面。

       注意kdialogdialog最大的区别是,kdialog窗口小部件使用STDOUT而非STDERR输出值。

clip_image020

 

clip_image022

clip_image024

clip_image026

#!/bin/bash

#using kdialog to create a menu

 

temp=`mktemp -t test.XXXXXX`

temp2=`mktemp -t test2.XXXXXX`

 

function diskspace

{

       #clear

       df -k > $temp

       kdialog –textbox $temp 1000 10

}

 

function whoseon

{

       #clear

       who > $temp

       kdialog –textbox $temp 500 10

}

 

function memusage

{

       #clear

       cat /proc/meminfo > $temp

       kdialog –textbox $temp 300 500

}

 

 

while [ 1 ]

do

       kdialog –menu "Sys Admin Menu" "1" "Display disk space" "2" "Display logged on users" "3" "Display memory usage" "0" "Exit program" >$temp2

 

if [ $? -eq 1 ]

then

       break

fi

selection=`cat $temp2`

 

       case $selection in

       1)

              diskspace;;

       2)

              whoseon;;

       3)

              memusage;;

       0)

              break;;

       *)

              kdialog –msgbox "Sorry, wrong selection"

       esac

done

15.4.2 GNOME环境

       GNOME图形化环境支持两种可以生成标准窗口的流行软件包。

l  gdialog

l  zenity

到目前为止,大多数GNOME桌面中,zenity是最常见的软件包。

clip_image028clip_image030

clip_image032

#!/bin/bash

#using zenity to create a menu

 

temp=`mktemp -t test.XXXXXX`

temp2=`mktemp -t test2.XXXXXX`

 

function diskspace

{

       #clear

       df -k > $temp

       zenity –text-info –title "Disk space" –filename=$temp  –width 750 –height 10

}

 

function whoseon

{

       #clear

       who > $temp

       zenity –text-info –title "Logged in users" –filename=$temp  –width 500 –height 10

#    zenity –text-info $temp 20 50

}

 

function memusage

{

       #clear

       cat /proc/meminfo > $temp

       zenity –text-info –title "Memory usage" –filename=$temp  –width 300 –height 500

       zenity –text-info $temp 20 50

}

 

 

while [ 1 ]

do

       zenity –list –radiolist –title "Sys Admin Menu" –column "Select" –column "Menu Item" FALSE "Display disk space" FALSE "Display logged on users" FALSE "Display memory usage" FALSE "Exit program" >$temp2

 

if [ $? -eq 1 ]

then

       break

fi

selection=`cat $temp2`

 

       case $selection in

       "Exit")

              break;;

       "Display disk space")

              diskspace;;

       "Display users")

              whoseon;;

       "Display memory usage")

              memusage;;

       *)

              zenity –info "Sorry, invalid selection"

       esac

done

       使用zenity软件包,可以在GNOME桌面上,为交互式shell脚本增加Windows的感觉。

日历的区别:

Kdialog

clip_image034

Zenity

clip_image036