shell下的菜单-3

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

       由select语法编写的菜单程序:

#!/usr/bin/ksh
#确认完成返回
confirm_over()
{
	echo "按
   
   
    
    确认完成\c"
	read
}

#确认是否继续
confirm_ok()
{
	echo "按
    
    
     
     确认执行\c"
	read
	if [ "$REPLY" = "y" ];then
		return 0
	else
		return 1
	fi
}

#参数是否都为数字
is_numbers()
{
	echo "$1"|grep "^[0-9][0-9]*$" >/dev/null
}

#选中退出选项
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
	执行批前备份
	执行日终程序
	查询日终日志
	查看系统状态
	退出菜单
EOF

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

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

#菜单项数量
item_num=`wc -l<$MENU_FILE|sed 's/ //g'`

#提示词
PS3="请输入选择项[1-$item_num]:"

#为了提高速度,放在内存里
menu_item=`cat menu.txt`

while true
do
	clear
	select choice in $menu_item
	do
		if is_numbers $REPLY && [ $REPLY -ge 1 ] && [ $REPLY -le $item_num ]
		then
			#将菜单编号转换为从0开始
			m_i=$((REPLY-1))
			${menu_acts[$m_i]}
			break
		fi
	done
done

    
    
   
   

菜单效果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值