Shell脚本编程|菜单制作实例

2019年6月18日 2 条评论 294 次阅读 2 人点赞

Linux Bash Shell 实例分享

菜单效果如下所示:分别输入按键,根据输入后的提示就可以执行相应的命令


按键1:添加用户

按键2:设置密码

按键3:删除用户

按键4:展示分区空间

按键5:展示内存使用空间

按键6:退出菜单

以上只是举个简单的实例,在生产一线中,由于很多命令即复杂又特别的长,更可气的是,这条命令还特别常用,为了高效维护,我们将许多的复杂命令就写成了菜单的形式,只用根据对应提示,输入对应的数字,即可实现相应的功能。

例如:我要添加一个新的用户,用户名为user123,那么只需要输入按键1后,再追加用户名即可

并且输入错误时,还能给出响应提示,例:我在上文创建了user123这个用户,此时再创建user123,就会给出响应提示

例如:输入按键5时,就能输出内存空间使用情况的报表

菜单总文件如下所示:(这里我将代码放在了/mnt目录下)

以下是menu.sh的代码示例

#!/bin/bash
#menu.sh

function myMenu(){

title="My menu"

title=`echo -e "\033[32;40m  ${title} \033[0m"`

url="www.xhyonline.com"

time=`date +%Y-%m-%d`
clear
	cat << eof

	##########################################
			$title
	##########################################

	*	1)add a user
	*	2)set password for user
	*	3)delete a user
	*	4)print disk space
	*	5)print mem space
	*	6)quit
	
	##########################################
	$url		$time

eof
#cat << eof的作用是按源代码输出
}

以下是index.sh的代码示例

#/bin/bash
#index.sh

. /mnt/menu.sh
#引入menu.sh文件
myMenu
#调用myMenu函数


while [[ true ]]; do

	read -p "please input your option:" option

	case $option in

	1)
		read -p "please input username for user:" name

		useradd $name &>/dev/null

		#执行useradd命令,且将这命令标准输出和错误输出全部重定向到/dev/null中,也就是将产生的所有信息丢弃
		#因此我们要在下面输出一段用户生成成功的提示

		if [[ $? -eq 0 ]]; then
			#$?的作用为判断上一条命令是否执行成功
			echo -e "\033[30;47m add user successful \033[0m"
			#用户创建成功
			else
			echo -e "\033[31;47m error user $name is created!!!!! \033[0m"	
			#用户重复创建,创建失败
		fi
		

		
		;;
	2)

		read -p "please input username:" name

		read -p "please input password for user:" password

		echo $password | passwd --stdin $name &>/dev/null
		#执行设置密码命令,且将这命令标准输出和错误输出全部重定向到/dev/null中,也就是将产生的所有信息丢弃
		#命令解释:给$name这个参数的用户设置密码,密码为$password参数的内容,--stdin为passwd快捷设置密码的方法
		if [[ $? -eq 0 ]]; then
			#$?的作用为判断上一条命令是否执行成功
			echo -e "\033[30;47m password set successful \033[0m"
			#密码设置成功
			else
			echo -e "\033[31;47m error password set fail!!!!! \033[0m"	
			#密码设置失败
		fi
		
		;;

	3)
		
		read -p "delete a user:" name

		userdel -r $name &>/dev/null
		#执行删除命令
		if [[ $? -eq 0 ]]; then
			#$?的作用为判断上一条命令是否执行成功
			echo -e "\033[30;47mdelete user successful\033[0m"
			#删除用户成功
			else
			echo -e "\033[31;47m error delete user fail!!!!! \033[0m"	
			#删除用户失败
		fi

		;;
	
	4)
			
		echo -e "\033[32;40m `free -m` \033[0m"
		#执行df -Th这条命令查看磁盘空间

		;;
	
	5)
		
		echo -e "\033[32;40m `df -Th` \033[0m"
		#执行df -Th这条命令查看内存空间
		
		;;
	
	6)
	
	echo -e "\033[31;47m quit successful \033[0m"
	break
		;;

		*)
			myMenu
		;;
	
	esac

done

这里需要留心的是,执行shell脚本需要给文件执行权限

命令:chmod o+x index.sh

命令:chmod o+x menu.sh

此时输入命令:/mnt/index.sh 就能实现该功能效果,再使用alias别名命名,就可以像使用ls查看目录一样使用了

结语:好久没动代码了,有些手生,文章中有些英语语法的错误- -各位不要在意,主要是分享下菜单制作的主要思路,菜单约等于命令集合的封装,菜单化的界面简直就是新手的福音........

兰陵美酒郁金香

左手代码右手诗

文章评论(2)

  • 梁桂锋

    嘿嘿嘿,我也想学shell编程,但是目前php框架还有太多需要学的了,laravel完了接着就是tp了 :cry:

    2019年6月18日
    • 兰陵美酒郁金香

      @梁桂锋 我最近刚考完试 :lol: 另外就是,你这个头像绝了哈哈哈

      2019年6月18日