case 條件判斷式

  1. case 判斷語法:
    case $變數名稱 in
      "變數內容1")
    	程式段
        ;;   ###兩個分號 (;;) 來代表該程式段落的結束
      "變數內容2")
    	程式段
    	;;
      *)
    	不包含變數內容1與變數內容2的其他程式執行段
    	exit 1
    	;;
    esac
    
  2. 改寫 sh07.sh 輸入 hello 的腳本,改用 case 條件判斷。
    [dywang@dywmac zzz]$ cat sh08.sh 
    #!/bin/bash
    
    case $1 in
    	"hello")
    		echo "Hello, how are you?"
    		;;
    	"")
    		echo "You MUST input parameters, ex> $0 someword"
    		;;
    	*)
    		echo "Usage $0 {hello}"
    		;;
    esac
    
  3. 執行結果。
    [dywang@dywmac zzz]$ sh sh08.sh 
    You MUST input parameters, ex> sh08.sh someword
    [dywang@dywmac zzz]$ sh sh08.sh someword
    Usage sh08.sh {hello}
    [dywang@dywmac zzz]$ sh sh08.sh hello
    Hello, how are you?
    
  4. if, case 都可以做條件判斷,就看使用哪種方式腳本可讀性、維護性比較高。以下例題使用 if 判斷星期幾?以決定使用的練習虛擬機,使用 case 判斷外部第 1 個參數,決定要在虛擬機執行什麼程式?
    [dywang@dywmac zzz]$ cat sh09.sh rhce
    #!/bin/bash
    
    k=$(date +%u)
    if [ "$k" -eq "4" ]; then
        kvm=kvm3
    elif [ "$k" -eq "1" ]; then
        kvm=kvm5
    else
        kvm=kvm6
    fi
    kvm="${kvm}.deyu.wang"
    
    case $1 in
    	'lpvar'|'rhcsa'|'rhce'|'mysql'|'py')
    		cmd="sh /tmp/$1.sh"
    		;;
    	'halt'|'reboot')
    		cmd="$1"
    		;;
    	'hello')
    		cmd="cd ~/zzz && ./hello"
    		;;
    	'ntp')
    		cmd="ntpdate -u 192.168.1.140"
    		;;
    	*)
    		cmd="exit"
    		echo "Nothing to do!"
    		;;
    esac
    echo "ssh $kvm \"$cmd\""
    
  5. 執行結果。
    [dywang@dywmac zzz]$ sh sh09.sh rhce
    ssh kvm6.deyu.wang "sh /tmp/rhce.sh"
    [dywang@dywmac zzz]$ sh sh09.sh py
    ssh kvm6.deyu.wang "sh /tmp/py.sh"
    [dywang@dywmac zzz]$ sh sh09.sh halt
    ssh kvm6.deyu.wang "halt"
    [dywang@dywmac zzz]$ sh sh09.sh ntp
    ssh kvm6.deyu.wang "ntpdate -u 192.168.1.140"
    [dywang@dywmac zzz]$ sh sh09.sh 
    Nothing to do!
    ssh kvm6.deyu.wang "exit"