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