使用shell编程,可以很方便的将一些复杂的操作过程固化,通过程序的流程控制和智能判断,简化输入、防止误操作,以此提高维护效率。
在界面程序中和web程序中,菜单的使用非常普遍,一方面菜单可以预览所有功能,另一方面菜单可以通过鼠标的简单单击就可以执行相关操作。
但对于命令行程序,无法使用鼠标,但我们也可以通过模拟菜单的方式,通过输入一位数字来选择相应的菜单操作,依此达到使用菜单的效果。
一、程序整体说明如下截图实现一个简单的菜单程序,菜单上共有四个选项,分别是查看磁盘,查看CPU负荷,查看内存占用,以及退出菜单选择。
通过清屏,确保屏幕显示完整无下移。
通过函数调用,代码可读性增强,便于维护。
①函数diskspace实现显示磁盘空间,执行df -k,执行前清屏
②函数cpustat实现CPU负荷查看,执行uptime,执行前清屏
③函数memfree实现内存占用情况查看,执行free -m,执行前清屏
④函数menu实现菜单显示
echo -e 处理特殊字符,也就是\t转义为tab,将菜单显示更整齐
echo -n 打印的字符串不再回车,也就是在提示串后面输入
read -n 1 option,-n为读取指定长度的串,本程序中的1就是读取一个字符,然后将读取的字符指定给变量option
同样,在执行显示菜单前清屏
⑤ 主程序通过while循环,重复执行选择,当选择0时退出循环
⑥while循环的内容要放到关键字do 和done之间
⑦通过case分支,根据option的值不同,执行不同的函数逻辑
这种分支在shell中很常见,比如启停脚本中,根据输入参数不同,执行启停
case以esac结束
⑧ * 代表其他的任何输入,也就是除了0,1,2,3的任务键盘输入
⑨程序执行完毕退出循环后,清屏
三、代码复用1、实现程序的启停
通过不同的选择,执行不同的命令,以此达到启停程序的目的。
2、实现数据库维护
我们经常要进行数据库的锁表、表空间、awr报告获取等频繁操作,将这些固化的维护写成菜单程序,交由基础维护人员执行。
3、实现更复杂的控制逻辑
样例中我们只定义了一级菜单,通过循环镶嵌可以实现多级菜单的操作。
附上程序代码:
#!/bin/bash
# simple script menu
function diskspace {
clear
df -k
}
function cpustat {
clear
uptime
}
function memfree {
clear
free -m
}
function menu {
clear
echo
echo -e "\t\t\t维护界面\n"
echo -e "\t1. 查看磁盘空间"
echo -e "\t2. 查看CPU负荷"
echo -e "\t3. 查看内存占用"
echo -e "\t0. 退出程序\n\n"
echo -en "\t\t请输入序号,选择您要执行的操作: "
read -n 1 option
}
#主程序
while [ 1 ]
do
menu
case $option in
0)
break ;;
1)
diskspace ;;
2)
cpustat ;;
3)
memfree ;;
*)
clear
echo "你选择了错误的序号";;
esac
echo -en "\n\n\t\t\t选择任意键返回菜单"
read -n 1 line
done
clear