linux中menu命令,利⽤shell创建⽂本菜单与窗⼝部件的⽅法前⾔
创建交互式shell脚本最常⽤的⽅法是使⽤菜单。提供各种选项可以帮助脚本⽤户了解脚本能做什么,不能做什么;通常菜单脚本会清空显⽰区域,然后显⽰可⽤的选项列表。本⽂给⼤家详细介绍了shell创建⽂本菜单与窗⼝部件的相关内容,分享出来供⼤家参考学习,下⾯话不多说了,来⼀起看看详细的介绍吧。
创建⽂本菜单
创建交互式shell脚本最常⽤的⽅法是使⽤菜单,它提供了各种选项帮助脚本⽤户了解脚本能做到的和不能做的。
shell脚本菜单的核⼼是case命令,该命令会根据⽤户在菜单上的选择来执⾏特定命令。
下⾯我们逐步了解和创建基于菜单的shell脚本的步骤。
创建菜单布局
第⼀步是决定在菜单上显⽰哪些元素以及想要显⽰的布局⽅式。
在创建菜单前,通常先清空显⽰器上已有的内容。这样能在⼲净的,没有⼲扰的环境中显⽰菜单了。
clear命令使⽤当前终端的terminfo数据来清理出现在屏幕上的⽂字。运⾏clear命令后可以使⽤echo命令显⽰菜单元素。
默认,echo命令只显⽰可打印的⽂本字符。⽽在创建菜单时⼀些⾮⽂本字符也⾮常有⽤,⽐如制表符和换⾏符。我们需要添加-e选项使得echo命令能解析包含在其中的⾮⽂本字符。
例如,
wsx@wsx:~/tmp$ echo -e "1.\tDisplay disk space"
1. Display disk space
这对于格式化菜单项布局⾮常⽅便,只需要⼏个echo命令就可以创建⼀个还不错的菜单。
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 an option: "
最后⼀⾏-en选项去掉末尾换⾏符使得菜单更专业点,光标会在⾏尾等待⽤户输⼊。
创建菜单的最后⼀步是获取⽤户输⼊。这⼀步⽤read命令。因为我们只期望⽤户使⽤单字符输⼊,在命令加-n选项进⾏限定。这样⽤户只需要输⼊⼀个数字,不⽤摁回车键。
read -n 1 option
创建菜单函数
shell脚本菜单选项作为⼀组独⽴的函数实现起来更为容易。要做到这⼀点,你要为每个菜单项创建独⽴的shell函数。第⼀步是决定你希望脚本执⾏那些功能,然后将这些功能以函数的形式放在代码中。
通常我们会为还没有实现的函数先创建⼀个桩函数,它是⼀个控函数,或者只有⼀个echo语句,说明
最终这⾥需要什么内容。
function diskspace {
clear
echo "This is where the diskspace commands will do"
}
这允许菜单在我实现某个函数时仍然能正常操作。不需要我们写出所有函数之后才能让菜单投⼊使⽤。函数从clear命令开始,这样我们就能在⼀个⼲净的屏幕上执⾏该函数,不会收到原先菜单的⼲扰。
另外,将菜单布局本⾝作为⼀个函数来创建有利于菜单制作。
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 an option: "
read -n 1 option
}
这样我们能在任何时候调⽤该函数以此重现菜单。
添加菜单逻辑
下⼀步我们需要创建程序逻辑将菜单布局和函数结合起来。这需要使⽤case命令。
case命令应该根据菜单中输⼊的字符来调⽤相应的函数,⽤case命令字符星号来处理所有不正确的菜单项。
下⾯展⽰了典型菜单的case⽤法:
menu
case $option in
0)
break ;;
1)
diskspace ;;
2)
whoseon ;;
3)
memusage ;;
*)
clear
echo "Sorry, wrong selection";;
esac
这⾥⾸先调⽤menu函数清空屏幕并显⽰菜单。menu函数中的read命令会⼀直等待,知道⽤户在键盘上键⼊⼀个字符。然后case命令会接管余下的处理过程,基于字符调⽤相应的函数。
整合shell脚本菜单
现在让我们将前⾯的步骤全部组合起来,看看它们是如何协作的。
这是⼀个完整的菜单脚本例⼦:
wsx@wsx:~/tmp$ cat test14
#!/bin/bash
# simple script menu
function diskspace {
clear
df -k
}
function whoseon {
shell创建文件并写入内容clear
who
}
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\tEnter an option: "
read -n 1 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
使⽤:
Sys Admin Menu
1. Display disk space
2. Display logged on users
3. Display memory usage
0. Exit menu
Enter an option:
输⼊1:
⽂件系统 1K-块 已⽤ 可⽤ 已⽤% 挂载点
udev 4006080 0 4006080 0% /dev
tmpfs 807220 81004 726216 11% /run
/
dev/sda4 305650672 14226064 275828680 5% / tmpfs 4036100 1724 4034376 1% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 4036100 0 4036100 0% /sys/fs/cgroup
/dev/sda3 524272 4684 519588 1% /boot/efi
tmpfs 807220 52 807168 1% /run/user/1000
tmpfs 807220 16 807204 1% /run/user/125
/dev/sda2 421886972 23340376 398546596 6% /media/wsx/存储
Hit any key to continue
其他都可以⾃⼰测试⼀下,我就不赘⾔了。
使⽤select命令
select命令只需要⼀条命令就可以创建出菜单,然后获取输⼊的答案并⾃动处理。
命令格式如下:
select variable in list
do
commands
done
list参数是由空格分隔的⽂本选项列表,这些列表构成了整个菜单。select命令会将每个列表项显⽰成⼀个带编号的选项,然后为选项显⽰⼀个由PS3环境变量定义的特殊提⽰符。
wsx@wsx:~/tmp$ cat smenu1
#!/bin/bash
# using select in the menu
function diskspace {
clear
df -k
}
function whoseon {
clear
who
}
function memusage {
clear
cat /proc/meminfo
}
PS3="Enter an option: "
select option in "Display disk space" "Display logged on users" "Display memory usage" "Exit program"
do
case $option in
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论