Bash
Case 語句在 shell 腳本中無法正常工作
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