Bash

Case 語句在 shell 腳本中無法正常工作

  • August 11, 2020

bash 腳本中的 case 語句不起作用。下面是我的 shell 腳本的片段。

usage="Usage: \n servicer [ service argument ] {-h}\n"
invalid="\n not a valid option\n"
argument="\n Please use -h option for help\n"

while getopts ":h:s" option
       do
               case "${option}" in
                       s ) service=$OPTARG;;
                       h ) echo -e $usage
                          exit 0
                       ;;
                       * ) echo -e $invalid
                          exit 1
                       ;;
               esac
       done

因此,每當我使用 -h 或 -s 選項執行腳本時,流程都會轉到最後一個 * 選項。

man getops頁面不是最容易閱讀的。很確定你想要getopts "hs:" 。冒號表示前面選項(字母)的選項參數(參數值)。

  • h不需要參數,因此沒有冒號 (:) 。
  • s需要一個參數,因此s:. s沒有參數也是無效的,因為冒號需要參數。
  • 其他任何東西都是無效的。

我還將您的靜態字元串 ( usage=, invalid=, argument=) 放在單引號中,並用雙引號括起輸出。

usage='Usage: \n servicer [ service argument ] {-h}\n'
invalid='\n not a valid option\n'
argument='\n Please use -h option for help\n'
while getopts "hs:" option; do
   case "${option}" in
       s) service="$OPTARG"
           ;;
       h) echo -e "$usage"
           exit 0
           ;;
       *) echo -e "$invalid"
           exit 1
           ;;
   esac
done

引用自:https://serverfault.com/questions/1029631