Shell編程之case語句的使用講解,shell編程case語句
大家好,今天給大家帶來的是Shell編程之case語句的使用!
其實case語句還是很好理解的,在shell編程中,if語句有它的文法,函數也有它的文法,那麼在我們shell編程中的case語句也是有它的文法的,如下:
case 變數名 in值1) 指令1;;值2) 指令2;;值3) 指令3;;esac
在以上的代碼中我們發現,以case開頭,以esac結尾,就像我們的if語句,以if開頭以fi結束時一樣的。
例2:
case "找老公條件" in 家裡有房子)嫁給你...;; 家庭有背景)嫁給你...;; 很努力吃苦) 那麼我們可以先談男女朋友..;;esac
好了接下來我們實踐,其實文法就是上面的一些基本文法,那麼我麼在實踐中來體會case到底有什麼用
其實自我認為case語句更適合一些菜單選項的指令碼,那麼我們先用if語句寫一個菜單指令碼如下:
#!/bin/bash#!/bin/bash# Date: 4:42 2018-2-5# Mail: ywyankerp@163.com# Founder: # Describe: This is a one - button installation service script function CDAN(){cat << yankerp 1.米飯2.麵條3.包子yankerp}CDANread -p 請您輸入您今天要吃什麼: NUMexpr $NUM + 1 &>/dev/nullif [ "$?" -ne 0 ] then echo "請您輸入{1|2|3}" exit 1fiif [ "$NUM" -eq 1 ] then echo "小二,來一碗米飯"elif [ $NUM -eq 2 ] then echo "小二,來一碗麵條"elif [ "$NUM" -eq 3 ] then echo "小二,來一鍋包子"fi
首先我們看到我們上面的if語句,是不是感覺有點繁瑣,那麼接下來我們使用case語句來實現 如下:
#!/bin/bash#!/bin/bash# Date: 4:42 2018-2-5# Mail: ywyankerp@163.com# Founder: # Describe: This is a one - button installation service script function CDAN(){cat << yankerp 1.米飯2.麵條3.包子yankerp}CDANread -p 請您輸入您今天要吃什麼: NUMexpr $NUM + 1 &>/dev/nullif [ "$?" -ne 0 ] then echo "請您輸入{1|2|3}" exit 1ficase $NUM in 1) echo "小二,來一碗米飯" ;; 2) echo "小二,來一碗麵條" ;; 3) echo "小二,來一鍋包子" ;;esac
剖析時刻:
#!/bin/bash#!/bin/bash# Date: 4:42 2018-2-5# Mail: ywyankerp@163.com# Founder: # Describe: This is a one - button installation service script function CDAN(){ #定義一個CDAN的函數cat << yankerp 1.米飯2.麵條3.包子yankerp}CDAN #調用CDAN函數read -p 請您輸入您今天要吃什麼: NUM #輸入一條提示,然後把使用者輸入的字串賦值給變數NUMexpr $NUM + 1 &>/dev/null # 使用數值運算命令expr來確定使用者輸入的是否是數值if [ "$?" -ne 0 ] #如果使用者輸入的不是數值 then #那麼 echo "請您輸入{1|2|3}" #列印出 1 2 3 exit 1 #最後退出指令碼fi #結束if語句case $NUM in #這裡就是我們的case語句了,簡單理解,在NUM這個變數中 1) #如果使用者輸入的是1 echo "小二,來一碗米飯" #那麼就輸出一行來一碗米飯 ;; 2) #如果在NUM變數中使用者輸入的是2 echo "小二,來一碗麵條" #那麼繼續列印此內容 ;; 3) #以此類推 echo "小二,來一鍋包子" ;;esac #最後使用esac結束
覺得不夠養眼?沒有關係如:
我們發現,在多個選項的這些指令碼中呢,還是使用case語句是比較方便合適的。
那麼我們掌握了基本的文法和它的一些功能,那麼我們可以結合函數+case語句來完成一個菜單式的安裝指令碼如下:
#!/bin/bash# Date: 4:42 2018-2-5# Mail: ywyankerp@163.com# Founder: # Describe: This is a one - button installation service script function CDAN(){cat << yankerp +------------------------------------------------+| || _o0o_ 1. 安裝Nginx || 08880 2. 安裝Apache || 88"."88 3. 安裝MySQL || (|-_-|) 4. 安裝PHP || 0\=/0 5. 部署LNMP環境 || __/ \__ 6. 安裝zabbix監控 || ‘\ ///‘ 7. 退出此管理程式 || / Linux一鍵 \ 8. 關閉電腦 || || Server || ====================== | | \ //// 一鍵安裝服務 || ||| i i i ||| by Yankerp || ___ ___ ====================== ||___‘. /--.--\ .‘___ |+------------------------------------------------+yankerp}CDAN. /etc/init.d/functionsBASE_DIR=/usr/local/srcread -p "請您輸入1-8任一字元:" NUMexpr $NUM + 1 &>/dev/nullif [ "$?" -ne 0 ] then echo "請您輸入{1|2|3|4|5|6|7|8}" exit 1fifunction Nginx_server (){echo "開始安裝Nginx請稍後...."yum install -y gcc gcc-c++ pcre-devel zlib-devel openssl-devel &>/dev/null cd $BASE_DIR && wget http://nginx.org/download/nginx-1.12.2.tar.gz &>/dev/null && useradd -M -s /sbin/nologin nginx && \tar zxf nginx-1.12.2.tar.gz && cd $BASE_DIR/nginx-1.12.2/ && \ ./configure --prefix=/usr/local/nginx --with-http_dav_module--with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module--with-pcre --with-http_ssl_module --with-http_gzip_static_module --user=nginx --group=nginx &>/dev/nullif [ "$?" -eq 0 ] thenmake && make install &>/dev/nullfiif [ -f /usr/local/nginx/sbin/nginx ];then ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin && nginx && echo "Nginx安裝成功!"fi} function Apache_server (){echo "開始安裝Apache請稍後"yum install httpd -y &>/dev/nullif [ "$?" -eq 0 ] then echo "Apache安裝成功!" else echo "Apache安裝失敗!" fi}case $NUM in1) Nginx_server;;2) Apache_server;;esac
運行結果如下:
以上指令碼大家可以參考參考,很簡單實現,那麼接下來在來一個案例
實戰2:編程Nginx啟動指令碼
編譯安裝的Nginx是沒有啟動指令碼的,這時候我們可以選擇自己寫一個,在這裡我用我的思路給大家解釋整個過程雖然不是很規範,希望還是能夠協助到你如下:
#!/bin/bashBASE_DIR=/usr/local/nginx/sbin/PID=/usr/local/nginx/logs/nginx.pid#no1.判斷是否root使用者登入if [ "$UID" -ne 0 ] then echo "請您使用root使用者登入!!!" exit 1fi. /etc/init.d/functions #判斷使用者輸入的傳參個數if [ "$#" -ne 1 ] then echo "/bin/bash $0 {start|stop|restart}"exit 1fi#編寫啟動Nginx函數function start (){if [ `netstat -anput | grep nginx | wc -l` -eq 0 ] then $BASE_DIR/nginxfi if [ "$?" -eq 0 ] then action "Nginx啟動成功!" /bin/true else action "Nginx啟動失敗!" /bin/false fi}#編寫停止Nginx函數function stop (){if [ `netstat -anput | grep nginx | wc -l` -ne 0 ] then $BASE_DIR/nginx -s stopfi if [ "$?" -eq 0 ] then action "Nginx停止成功!" /bin/true else action "Nginx停止失敗!" /bin/false fi}#編寫case語句 使用特殊的位置變數$1來判斷使用者輸入的內容case $1 instart) start;;stop) stop;; restart) stop start;;esac
運行如下:
一張圖更清晰解釋