shell编程基础(二) case语句应用

 case条件结构语句

case "字符串变量" in

  值1)

     指令1

     ;;

  值2)

     指令2

     ;;

  值*)

     指令

esac

 case与if的对比

case书写方式

case $name in

  值1)

      指令1

      ;;

  值2)

      指令2

      ;;

   *)

      指令

esac

 

if书写方式

if [ $name == "值1" ]

  then

    指令1

elif [ $name == "值2" ]

  then

    指令2

else

    指令   

fi

 case值的书写方式

apple)

      echo -e "$RED_COLOR apple $RES"

      ;;

也可以这样写,输入2种格式找同一个选项

apple|APPLE)

      echo -e "$RED_COLOR apple $RES"

      ;;

 case语句小结

case语句就相当于多分支的if语句。case语句的优势是更规范、易读。

case语句适合变量的值少,且为固定的数字或字符串集合。(1,2,3)或(start,stop,restart)。

系统服务启动脚本传参的判断多用case语句,多参考rpcbind/nfs/crond脚本;菜单脚本也可以使用case

 

 写脚本规范及注意事项

1.变量名称不能和系统已经存在的命令等重复  free  == > Free

2. 判断单位要统一

3. 脚本一行不超过一屏的一半。

4. 能写成变量的内容尽量写成变量

 

if 语句类似黑名单,需要把这种错误场景封堵

case 语句类似白名单,只要把正确结果列完整即可

 练习

[root@oldboy scripts]# cat menu3.sh

#!/bin/bash

##############################################################

# File Name: menu2.sh

# Version: V1.0

# Author: oldboy

# Organization: www.oldboyedu.com

##############################################################

echo '1.install MySQL

2.install Tomcat

3.exit'

read -p "请选择一个数字:" num

[ -z "$num" ] && exit 1

 

expr $num + 99 &>/dev/null

if [ $? -ne 0 ]

then

    echo "请输入整数"

    exit

fi

 

case "$num" in

    1)

        echo "install MySQL"

        ;;

    2)

        echo "install Tomcat"

        ;;

    3)

        echo bye

        exit 1

        ;;

    *)

        echo "别瞎逼输入,请输入{1|2|3}"

esac

 

Rsync启动脚本

[root@oldboy scripts]# cat rsync1.sh

#!/bin/bash

##############################################################

# File Name: rsync.sh

# Version: V1.0

# Author: oldboy

# Organization: www.oldboyedu.com

##############################################################

start(){

    rsync --daemon &>/dev/null

    retval=$?

    if [ $retval -eq 0 ]

    then

        echo "rsyncd is started."

        return $retval

    else

        echo "rsyncd startup fail."

        return 1

    fi

}

stop(){

    pkill rsync &>/dev/null

    retval=$?

    if [ $retval -eq 0 ]

    then

        echo "rsyncd is stopped"

        return 0

    else

        echo "rsyncd stop fail."

        return 1

    fi

}

case "$1" in

    start)

        start

        retval=$?

        exit $retval

        ;;

    stop)

        stop

        retval=$?

        exit $retval

        ;;

    restart)

        stop

        sleep 2

        start

        retval=$?

        exit $retval

        ;;

    *)

        echo $"Usage:$0 {start|stop|restart}"

        exit 1

esac

exit $retval

posted @ 2017-08-15 23:17  绝望的战斗鸡  阅读(179)  评论(0编辑  收藏  举报