18 图形化桌面环境中的脚本编程

18 图形化桌面环境中的脚本编程

18.1 创建文本菜单

18.1.1 创建菜单布局

clear   #清除所有的字符
echo
echo -e "\t\t\tSys Admin Menu\n"       #-e只显示可打印的文本字符
echo -e "\t1. Display disk space"
echo -e "\t2. Display logged on users"
echo -e "\t3. Display memory usage"
echo -e "\t0. Exit menu\n\n"
echo -en "\tEnter option:"              #-n去掉末尾的换行符
read -n 1 option            #-n限制读取的数量,只读一个字符

18.1.2 创建菜单函数
为还没有实现的函数先创建一个桩函数(stub function)。桩函数是一个空函数,或者只有一个echo语句,说明最终这里里需要什么内容。

function diskspace { 
   clear 
   echo "This is where the diskspace commands will go" 
 }

这里我们首先将菜单布局当成一个函数创建

function menu {
	clear   #清除所有的字符
	echo
	echo -e "\t\t\tSys Admin Menu\n"       #-e只显示可打印的文本字符
	echo -e "\t1. Display disk space"
	echo -e "\t2. Display logged on users"
	echo -e "\t3. Display memory usage"
	echo -e "\t0. Exit menu\n\n"
	echo -en "\tEnter option:"              #-n去掉末尾的换行符
	read -n 1 option            #-n限制读取的数量,只读一个字符
}

18.1.3 添加菜单逻辑

menu
case $option in
0) echo ;;
1) diskspace ;;
2) whoseon  ;;
3) menusage ;;
*) clear
   echo "Sorry,wrong selection";;
esac

18.1.4 整合shell脚本菜单

#!/bin/bash
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 menu\n\n"
    echo -en "\t\tEnter option:"              #-n去掉末尾的换行>符
    read -n 1 option            #-n限制读取的数量,只读一个字符
}
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) menusage ;;
   *) clear
      echo "Sorry,wrong selection";;
   esac
   echo -en "\n\n\t\t\tHit any key to continue"
   read -n 1 line                   #读取任意字符防止影响下一个
done
clear

18.1.5 使用select命令

select variable in list 
do 
    commands 
done

感觉比上面的方法还要麻烦一些,这里贴原书的代码:

PS3="Enter option: " 
select option in "Display disk space" "Display logged on users""Display memory usage" "Exit program" 
do 
   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

18.2 制作窗口

18.2.1 dialog包

dialog部件在这里插入图片描述
msgbox部件

dialog --msgbox text height width

如果想在窗口顶部放一个标题,也可以用–title参数,后接作为标题的文本。

dialog --title Testing --msgbox "This is a test" 10 20

运行结果如下:
运行结果
yesno部件
yesno部件进一步扩展了msgbox部件的功能,允许用户对窗口中显示的问题选择yes或no。它会在窗口底部生成两个按钮:一个是Yes,一个是No。用户可以用鼠标、制表符键或者键盘方向键来切换按钮。要选择按钮的话,用户可以按下空格键或者回车键。如果用户选择了No按钮,退出状态码是1;如果选择了Yes按钮,退出状态码就是0。
运行结果
inputbox部件
inputbox部件为用户提供了一个简单的文本框区域来输入文本字符串。dialog命令会将文本字符串的值发给STDERR。你必须重定向STDERR来获取用户输入。

#输入年龄并将STDERR重定向到age.txt
dialog --inputbox "Enter your age:" 10 20 2>age.txt

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

dialog --textbox /etc/passwd 15 45

textbox结果
menu部件
第一个参数定义为菜单的标题,第二、三个参数定义了菜单窗口的高和宽,第四个参数表示一次显示的菜单项总数。dialog命令会将选定的菜单项文本发送到STDERR

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

fselect部件
fselect部件处理文件名非常方便,不用强制用户键入文件名,可以用fselect部件来浏览文件的位置并选择文件。

18.2.2 dialog选项

在这里插入图片描述
在这里插入图片描述

18.2.3 在脚本中使用dialog命令

必须记住:
1.如果有Cancel或者No按钮,检查dialog命令的退出状态码
2.重定向STDERR获取输出值

实现代码:

#!/bin/bash 
# using dialog to create a menu 
 
temp=$(mktemp -t test.XXXXXX)
temp2=$(mktemp -t test2.XXXXXX) 

#菜单的相关函数实现
function diskspace { 
   df -k > $temp 
   dialog --textbox $temp 20 60 
} 
 
function whoseon { 
   who > $temp 
   dialog --textbox $temp 20 50 
} 
 
function memusage { 
   cat /proc/meminfo > $temp 
   dialog --textbox $temp 20 50 
} 
 
#持续运行,打印菜单并且重定向STDERR文件描述符
while [ 1 ] 
do 
dialog --menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 
"Display users" 3 "Display memory usage" 0 "Exit" 2> $temp2 
if [ $? -eq 1 ] 
then 
   break 
fi 

#得到选择
selection=$(cat $temp2) 
 
case $selection in 
1) 
   diskspace ;; 
2) 
   whoseon ;; 
3) 
   memusage ;; 
0) 
   break ;; 
*) 
   dialog --msgbox "Sorry, invalid selection" 10 30 
esac 
done 

#删除临时文件并忽略输出
rm -f $temp 2> /dev/null 
rm -f $temp2 2> /dev/null

18.3 使用图形

18.3.1 KDE环境

KDE图形化环境默认包含kdialog包。kdialog包使用kdialog命令在KDE桌面上生成类似于dialog式部件的标准窗口。
1.kdialog部件

kdialog display-options window-options arguments

选项图片
2.在脚本中使用kdialog部件
注意这里唯一的区别是kdialog使用STDOUT输出。

18.3.2 GNOME环境

gnome支持gdialogzenity
1.zenity部件
zenity部件
2.在脚本中使用zenity部件
zenity没有沿袭dialogkdialog中所采用的选项惯例,因此,将已有的交互式脚本迁移到zenity上要花点工夫。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值