码迷,mamicode.com
首页 > 其他好文 > 详细

15、bash编程、case、函数

时间:2018-01-15 20:17:24      阅读:2768      评论:0      收藏:0      [点我收藏+]

标签:res   hit   停止   顺序   normal   一个用户   用户名   结构   mod   

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语句实现:

[root@localhost 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

[root@localhost sh]# 

case语句实现:

[root@localhost 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

[root@localhost sh]# 


4、示例:写一个服务脚本:$lockfile 值:/var/lock/subsys/SCRIPT_NAME

 要求:此脚本可接受start、stop、restart、status四个参数之一

    如果参数非此四者,则提示使用帮助后退出

    start,则创建lockfile,并显示启动

    stop,则删除lockfile,并显示停止

    restart,则先删除此文件,再创建此文件,而后显示重启完成

    status,如果lockfile存在,则显示running,否则,则显示为stopped

[root@localhost 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

[root@localhost init.d]# 


测试:

[root@localhost init.d]# cp testservice.sh /etc/init.d/

[root@localhost init.d]# chkconfig --add  testservice.sh    

[root@localhost init.d]# chkconfig --list testservice.sh

[root@localhost init.d]# chmod +x /etc/init.d/testservice.sh

[root@localhost init.d]# service testservice.sh start

[root@localhost 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

 


























15、bash编程、case、函数

标签:res   hit   停止   顺序   normal   一个用户   用户名   结构   mod   

原文地址:http://blog.51cto.com/10631377/2061243

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!