Linux
腳本的命令行選項
$ cat test15.sh #!/bin/bash # extracting command line options as parameters # echo while [ -n "$1" ] do case "$1" in -a) echo "Found the -a option" ;; -b) echo "Found the -b option" ;; -c) echo "Found the -c option" ;; *) echo "$1 is not an option" ;; esac shift done $ $ ./test15.sh -a -b -c -d Found the -a option Found the -b option Found the -c option -d is not an option $
-d
表示調試或刪除作為命令行選項。那麼,當我們將它包含在某些腳本的命令行選項中時,為什麼它不是一個選項?
-d
表示它被程式來表示的任何內容,不一定是刪除或調試。例如curl
,-d
是數據的選項。在您的腳本-d
中不是一個有效的選項。您的選項是-a
、-b
和-c
。所有這些基本上什麼都不做。while [ -n "$1" ] do case "$1" in -a) echo "Found the -a option" ;; -b) echo "Found the -b option" ;; -c) echo "Found the -c option" ;; *) echo "$1 is not an option" ;; esac shift done
要添加對您的支持,
-d
您必須將其添加到您的案例聲明中,如下所示:while [ -n "$1" ] do case "$1" in -a) echo "Found the -a option" ;; -b) echo "Found the -b option" ;; -c) echo "Found the -c option" ;; -d) echo "Found the -d option" ;; *) echo "$1 is not an option" ;; esac shift done
處理命令行選項的更好方法是使用
getopts
如下所示:while getopts abcd opt; do case $opt in a) echo "Found the -a option";; b) echo "Found the -b option";; c) echo "Found the -c option";; d) echo "Found the -d option";; *) echo "Error! Invalid option!" >&2;; esac done
abcd
是預期參數的列表。
a
- 檢查-a
沒有參數的選項;在不支持的選項上給出錯誤。
a:
- 檢查-a
帶有參數的選項;在不支持的選項上給出錯誤。該參數將設置為OPTARG
變數。
abcd
- 檢查選項-a
,-b
,-c
,-d
; 在不支持的選項上給出錯誤。
:abcd
- 檢查選項-a
,-b
,-c
,-d
; 消除不受支持的選項的錯誤。
opt
是目前參數將被設置為的變數(也在 case 語句中使用)