Linux

腳本的命令行選項

  • February 9, 2019
$ 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 語句中使用)

引用自:https://unix.stackexchange.com/questions/499670