15bash编程case函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了15bash编程case函数相关的知识,希望对你有一定的参考价值。
1、bash脚本编程: 选择执行:if单分支、if双分支、if多分支;case语句
2、case语句:
语法格式:
case $VARIABLE in //$VARIABLE是变量引用,in是关键字
PAT1) //模式1
分支1
;; //以双分号结束分支1语句
PAT2)
分支2
;;
...
*) //所有都不匹配,为*,类似else
分支n
;;
esca
注意:①、每个case中的模式语句必须以双分号结尾,这里的双分号可以单独成行,也可以放在每个分支的最后一条语句后面,PAT仅支持golb风格的通配符(*、?、[ ] 、[^ ])
②、case语句仅适用于一个变量与多个值分别做模式匹配时适用。
3、示例:显示一个如下菜单给用户
cpu) display cpu information
mem)display mem information
disk)display disk information
*) quit
要求:提示用户给出自己的选择
正确的选择则给出相应的信息,否则,则提示重新选择正确的选项。
if语句实现: [[email protected] sh]# cat men.sh #!/bin/bash cat << EOF cpu) display cpu information mem)display mem information disk)display disk information *) quit EOF read -p "enter your choice:" choice while [ "$choice" != "cpu" -a "$choice" != "mem" -a "$choice" != "disk" -a "$choice" != "*" ];do echo "please make sure your choice" read -p "enter your choice again:" choice done if [ "$choice" == "cpu" ];then lscpu elif [ "$choice" == "mem" ];then free elif [ "$choice" == "disk" ];then fdisk -l /dev/[hs]d[a-z] else echo "quit" exit 4 fi [[email protected] sh]# | case语句实现: [[email protected] sh]# cat case.sh #!/bin/bash cat << EOF cpu) display cpu information mem)display mem information disk)display disk information *) quit EOF read -p "enter your choice:" choice while [ "$choice" != "cpu" -a "$choice" != "mem" -a "$choice" != "disk" -a "$choice" != "*" ];do echo "please make sure your choice" read -p "enter your choice again:" choice done case $choice in cpu) lscpu;; mem) free ;; disk) fdisk -l /dev/[hs]d[a-z] ;; *) echo "quit" exit 4 esac [[email protected] sh]# |
4、示例:写一个服务脚本:$lockfile 值:/var/lock/subsys/SCRIPT_NAME
要求:此脚本可接受start、stop、restart、status四个参数之一
如果参数非此四者,则提示使用帮助后退出
start,则创建lockfile,并显示启动
stop,则删除lockfile,并显示停止
restart,则先删除此文件,再创建此文件,而后显示重启完成
status,如果lockfile存在,则显示running,否则,则显示为stopped
[[email protected] init.d]# cat testservice
#!/bin/bash
#chkconfig: - 50 50
#description: test service script
prog=$(basename $0)
lockfile=/var/lock/subsys/$prog
case $1 in
start)
if [ -f $lockfile ];then
echo "$prog is running yet"
else
touch $lcokfile
[ $? -eq 0 ] && echo "start $rpog finished"
fi
;;
stop)
if [ -f $lockfile ];then
rm -rf $lockfile
[ $? -eq 0 ] && echo "stop $prog finished"
else
echo "prog is not runing"
fi;;
restart)
if [ -f $lockfile ];then
rm -rf $lockfile
touch $lockfile
echo "restart $prog finished"
else
touch -f $lockfile
echo "start $prog finished"
fi;;
status)
if [ -f $lockfile ];then
echo "$prog is running"
else
echo "$prog is stopped"
fi;;
*)
echo "usage:$prog {start | stop | restart | status}"
exit 5;;
esac
[[email protected] init.d]#
测试:
[[email protected] init.d]# cp testservice.sh /etc/init.d/
[[email protected] init.d]# chkconfig --add testservice.sh
[[email protected] init.d]# chkconfig --list testservice.sh
[[email protected] init.d]# chmod +x /etc/init.d/testservice.sh
[[email protected] init.d]# service testservice.sh start
[[email protected] init.d]# ls /var/lock/subsys/ //每个启动的服务在此目录下都有一个锁文件。
5、函数:function;对于过程式编程来讲,函数是实现代码重用的主要组件之一。
5.1、函数的定义:把一段独立功能的代码当做一个整体,并为它命名一个名字,即命名的代码段。注意:函数的代码段不会自己执行,它只能在被调用时才执行。
5.2、函数的调用:在代码中给定函数名即可;函数名出现的问题,在代码执行时都会被自动的替换为函数代码。
5.3、函数的功能:
①实现模块化编程
②实现结构化编程
5.4、函数的语法:
语法一: function f_name{ 函数体 } 注意:function是关键字,f_name是函数名,函数体在bash中编写的各类代码,无论是顺序的、选择的、循环的,都可以放在函数体中。 | 语法二: f_name( ) { 函数体 } |
注意:函数都有自己的生命周期:每次被调用时创建,返回时终止。
函数也有返回值:其状态返回结果为函数体中运行的最后一条命令的状态结果
5.5、自定义函数状态返回值:return
return用法:
return [0-255]
0:表示成功
1-255:表示失败
注意:函数中遇到return命令时,函数就不再往下运行了。
脚本的状态返回值:exit
exit用法:
exit [0-255]
0:表示成功
1-255:表示失败
5.6、函数示例:
给定一个用户名,通过脚本取得用户ID,和默认shell
以上是关于15bash编程case函数的主要内容,如果未能解决你的问题,请参考以下文章
linux基础16-bash编程(case语句及脚本选项 )