shell下的菜单-2

        三种生成菜单的方式,C编写的菜单解析程序、dialog工具、select语法。前两种方式是基于curses库的实现,可以处理光标移动,第三种方式由ksh或bash所提供的select菜单方式实现,不支持光标移动。

        使用dialog工具编写的菜单程序:

#!/usr/bin/sh
confirm_over()
{
	dialog --title "msgbox" --msgbox "执行完成!" 5 20
}

confirm_ok()
{
	dialog --title "yesno" --no-shadow --yesno "要继续执行么?" 5 30
}

#返回11表示出错
#之所以不使用1作为错误返回,是因为菜单中选择cancel会返回1
#之所以不使用255作为错误返回,是因为菜单中按ESC键会返回255
build_dialog()
{
	if [ ! -f "$1" ]
	then
		echo "菜单文件[$1]不存在!"
		return 11
	fi

	if [ -z "$l_items" ]
	then
		item_i=0
		set -A arr_items `cat $1`
		item_num=${#arr_items[*]}
		while [ $item_i -lt $item_num ]
		do
			tag="`echo ${arr_items[$item_i]}|cut -d '.' -f 1`"
			item="`echo ${arr_items[$item_i]}|cut -d '.' -f 2`"
			l_items="$l_items $tag $item"
			item_i=$((item_i+1))
		done
	fi
	dialog --title "日终执行菜单" --menu "选择其中一项" 20 40 $item_num $l_items
}

#选中退出选项
f0()
{
	exit 0
}

#选中第一个菜单
f1()
{
	clear
	if confirm_ok ;then
		#要执行的命令
		:
		clear
		confirm_over
	fi
}

#选中第二个菜单
f2()
{
	clear
	confirm_over
}

#选中第三个菜单
f3()
{
	clear
	confirm_over
}

#选中第四个菜单
f4()
{
	clear
	confirm_over
}

MENU_FILE=menu.txt
cat >$MENU_FILE <<-EOF
	1.执行批前备份
	2.执行日终程序
	3.查询日终日志
	4.查看系统状态
	q.退出菜单
EOF

#菜单项个数
item_num=0
#单行的菜单项
l_items=
#多行的菜单项
arr_items=

#定义菜单的响应程序
set -A m_acts f1 f2 f3 f4 f0

if [ `wc -l<$MENU_FILE` -ne $((${#m_acts[*]})) ]
then
	echo "请检查菜单条目和响应程序是否一致!"
	exit 1
fi

while true
do
	build_dialog $MENU_FILE 2>sel.txt
	if [ $? -eq 11 ];then
		echo "显示菜单出错!"
		exit 1
	fi
	ans=`head -1 sel.txt`
	item_i=0
	while [ $item_i -lt $item_num ]
	do
		tag="`echo ${arr_items[$item_i]}|cut -d '.' -f 1`"
		if [ "$tag" = "$ans" ]
		then
			${m_acts[$item_i]}
			break
		fi
		item_i=$((item_i+1))
	done
done

菜单效果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值