liunx中图形化桌面环境中的脚本编程之——创建文本菜单
整体是通过建立菜单布局,然后根据菜单上的布局建立函数(就是为这些布局实现功能),最后将函数和布局实现逻辑上的相连;
如何建立菜单布局?
整体上是通过打印字符创建出,因此需要使用echo命令,但是有一些非打印字符,这些非打印字符很有用,如 空格键,换行符,对应的是\t,\n ,,想要打印出这些非打印字符,就必须使用echo -e 选项,最后一个是获取用户的输入,echo -en 选项可将光标移至你选项后的内容,这样使得菜单更专业些,再用read -n 1 option (意思是读取一个字符并将其保存在option中)
1 echo -e "\t\t\t SYS Admin MENU\n" 2 echo -e "\t1. display disk space" 3 echo -e "\t2. display logged on users" 4 echo -e "\t3. display memory usages" 5 echo -e "\t0. Exit menu\n\n" 6 echo -en "\t\tEnter option:"
运行后的结果是
1 ]# ./graphical 2 SYS Admin MENU 3 4 1. display disk space 5 2. display logged on users 6 3. display memory usages 7 0. Exit menu 8 9 10 Enter option:[root@localhost ~]#
这个是没有加read,没有读取命令,还是不行的,因此想要获取用户的输入,有两步,第一步是提供输入,第二步读取输入;
现在我们来看看加了read的命令后所出现的情况
1 #! /bin/bash 2 echo -e "\t\t\t SYS Admin MENU\n" 3 echo -e "\t1. display disk space" 4 echo -e "\t2. display logged on users" 5 echo -e "\t3. display memory usages" 6 echo -e "\t0. Exit menu\n\n" 7 echo -en "\t\t\tEnter option:" 8 read -n 1 option 9 ~
运行下看看
1 [root@localhost ~]# ./graphical 2 SYS Admin MENU 3 4 1. display disk space 5 2. display logged on users 6 3. display memory usages 7 0. Exit menu 8 9 10 Enter option:
很明显这样就是让你在光标后输入一个字符并读取;
关于echo命令的小提示 echo"the $file not file" ,,就会出现 ./text11: line 15: echothe z2 not file: command not found
而如果你如果你在echo后空一格 echo "the $file not file" ,,就会出现 the z2 not file ,,,所以echo打印时必须要空格,至少空一格,至多无限;
如何创建函数?
通常我们为没有实现的函数创建一个空函数,里面至多只有一个echo语句,
1 function stub 2 { 3 echo "this is a stub function" 4 }
这个桩函数,又叫空函数,是为了,你不必为每个菜单键写一个函数后,才让菜单投入使用;
另外,有助于shell脚本的,你可以将菜单本身当做一个函数来创建,,所以每次你想再次打开菜单的时候,不用每次都运行这个文件,你可以直接调用菜单函数,重现菜单。
1 function menu{ 2 clear 3 echo -e "\t\t\t SYS Admin MENU\n" 4 echo -e "\t1. display disk space" 5 echo -e "\t2. display logged on users" 6 echo -e "\t3. display memory usages" 7 echo -e "\t0. Exit menu\n\n" 8 echo -en "\t\t\tEnter option:" 9 read -n 1 option 10 }
最后就是将你创建的菜单布局和函数进行相连,,这个相连是通过程序逻辑而实现的;可通过case命令,case可将你的选择和匹配的条件进行比较从而输出命令;
他的语法是
case option in test1 | test2) command;; test3) command;; test4) command;; *) command;; esac
首先我可以通过调用menu函数打开菜单布局,然后在用case函数进行程序逻辑相连