shell編程之case語句

 

shell編程之case語句

1.case語句的用途用語法

case 結構條件句至關於多分支的if/elif/else條件句,可是它比這些條件語句看起來更規範工整,常被用於實現系統服務啓動腳本等企業node

case語法
case 變量名 in
    值1)
        指令1
        ;;
    值2)
        指令2
        ;;
    值3)
        指令3
        ;;
    *)
        指令1
esac

1.1 case結構條件語句的執行流程

 

1.2 case語句的使用總結

1.case語句與if條件句的適用性
case語句比較適合變量值較少且爲固定的數字或字符串集合狀況(非不肯定的內容,例如範圍),若是變量的值是已知固定的start/stop/restart等元素,那麼採用case語實現就比較適合
2.case語知與if語句的常見應用場景
case主要是寫服務的啓動腳本,通常狀況下,傳參不一樣且具備少許的字符串,其適用範圍窄
if就是取值判斷、比較、應用比case更廣。幾乎全部的case語句均可以用if條件語句實現
3.case語句的優點與特色
case語句就至關於多分支的if/elif/else語句,但case語句的優點是更規範、易讀

1.3 case語句案例

1.3.1 執行shell腳本,打印一個以下的水果菜單:

1.apple
2.pear
3.banana
4.cherry
當用戶輸入對應的數字選擇水果的時候,告訴他選擇的水果是什麼,並給水果單詞加上一種顏色(隨意),要求用case語句實現。
[root@ci-node1 scripts]# cat 14.sh 
#!/bin/bash
##############################################################
# File Name: 14.sh
# Version: V1.0
# Author: liu
# Organization: 
# Created Time : 2019-04-13 11:41:33
# Description:
##############################################################
cat <<EOF
    1.apple
    2.pear
    3.banana
    4.cherry
EOF
read -p "請輸入您的選擇:" num
red="\033[31m"
green="\033[32m"
yewllo="\033[33m"
blue="\033[34m"
tailer="\033[0m"
case $num in
    1)
        echo -e "$red apple $tailer"
        ;;
    2)
        echo -e "$green pear $tailer"  
        ;;
    3)
        echo -e "$yewllo banana $tailer" 
        ;;
    4)
        echo -e "$blue cherry $tailer"
        ;;
    *)
        echo "Usage:$0{1|2|3|4}"
        exit 1
esac

1.3.2 利用case語句開發Rsync服務啓動中止腳本,本例採用case語句以及新的思路來實現

[root@ci-node1 scripts]# cat rsync.sh 
#!/bin/bash
##############################################################
# File Name: rsync.sh
# Version: V1.0
# Author: liu
# Organization: 
# Created Time : 2019-04-13 12:13:32
# Description:
##############################################################
. /etc/init.d/functions
#rsyncd進程號路徑
rsyncd_pid_path=/var/run/rsyncd.pid
#建立鎖文件
lockfile=/var/lock/subsys/rsyncd
start() {
    if [ ! -f $rsyncd_pid_path ]
    then
        rsync --daemon
        retval=$?
        if [ $retval -eq 0 ]
        then
            action "rsync is start ok" /bin/true
            touch $lockfile
            return $retval
        else
            action "rsync is start fail" /bin/false
            return $retval
        fi
    else
        echo "rsync in runing.."
    fi
}
stop() {
    if [ -f $rsyncd_pid_path ]
    then
        rsyncd_pid=`cat $rsyncd_pid_path`
        #判斷進程是否存在
        if (kill -0 $rsyncd_pid &>/dev/null)
        then
            kill $rsyncd_pid
            retval=$?
            if [ $retval -eq 0 ]
            then
                action "rsync is stop ok" /bin/true
                rm -f $lockfile
                return $retval
            else
                action "rsync stop fail" /bin/false
                return $retval
            fi
        fi
    else
        echo "$rsyncd_pid_path is not exist or rsyncd does not startup"
    fi
}

case $1 in
    start)
        start
        retval=$?
        ;;
    stop)
        stop
        retval=$?
        ;;
    restart)
        stop
        retval=$?
        sleep 1
        start
        retval=$?
        ;;
    *)
        echo "Usage:$0{start|stop|restart}"
        exit 1
esac
exit $retval

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">shell

相關文章
相關標籤/搜索