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

使用字符打印的菜单界面实现交互。

创建文本菜单

通常菜单脚本会清空显示区域、显示可用选项列表、识别用户选择,这就意味着文本菜单的核心是 case 命令。

创建菜单布局

clear 命令可用于当前终端会话的 terminfo 数据来清理出现在屏幕上的文本。
echo 默认只显示可打印字符,-e 选项能够使其显示制表符,-en 选项能够去掉末尾的换行符。

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\t Enter option: "
}

创建菜单的最后一步是获取用户输入,这步用 read 命令,在 read 命令中使用 -n 选项来限制只读取一个字符。这样用户只需要输入一个数字,也不用按回车键:

read -n 1 option

创建菜单函数

我们需要为每个菜单选项提供独立的 shell 函数。创建 shell 菜单脚本的第一步就是决定你希望脚本执行哪些功能,然后将这些功能以函数的形式放在代码中。

为还没实现功能的函数创建一个桩函数,可以是一个空函数,也可以是具有 echo 语句的函数。

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

添加菜单逻辑

使用 case 命令:

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

整合 shell 脚本菜单

#!/bin/bash
#...

function diskspace {
	clear
	df -k
}

function whoseon {
	clear
	cat /proc/meminfo
}

function memusage {
	clear
	cat /proc/meminfo
}

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\t Enter option: "
}

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

使用 select 命令

使用 select 快速创建出菜单,然后获取输入的答案并自动处理。

select variable in list
do 
	commands
done

list:由空格分隔的文本选项列表,这些列表构成了整个菜单,select 命令会将每个列表项显示成一个带编号的选项,然后为选项显示一个由PS3环境变量定义的特殊提示符。

#!/bin/bash
# ...

function diskspace {
	clear
	df -k
}

function whoseon {
	clear
	who
}

function memusage {
	clear
	cat /proc/meminfo
}

PS3="Enter options: " 
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")
		whoseon ;;
	"Display memory usage")
		memusage ;;
	*)
		clear
		echo "Sorry, wrong selection" ;;
	esac
done
clear

制作窗口

dialog 包

msgbox 部件

yesno 部件

inputbox 部件

textbox 部件

menu 部件

fselect 部件

dialog 选项

在脚本中使用 dialog 命令

使用图形

KDE 环境

kdialog 部件

使用 kdialog

GNOME 环境

zenity 部件

在脚本中使用 zenity

上一篇:java – HashMap.clear()是否将内部哈希表的大小调整为原始大小?


下一篇:C++中cin.clear()函数的说明及具体使用