在寫sh腳本的時候,常常需要運行時輸入一些數據。基本的$*,執行的情況,大概就是$0 $1 $2 $3…… 那么,那些系統命令里的參數又是怎么做出來的呢?我們自己的腳本如何搞出來$0-$1的效果呢?這就是getopts的作用了。舉例如下:
#!/bin/bash echo "OPTIND starts at $OPTIND" while getopts ":pq:" optname do case "$optname" in "p") echo "Option $optname is specified" ;; "q") echo "Option $optname has value $OPTARG" ;; "?") echo "Unknown option $OPTARG" ;; ":") echo "No argument value for option $OPTARG" ;; *) # Should not occur echo "Unknown error while processing options" ;; esac echo "OPTIND is now $OPTIND" done
在使用getopts命令的時候,shell會自動產生兩個變量OPTIND和OPTARG。
OPTIND初始值為1,其含義是下一個待處理的參數的索引。只要存在,getopts命令返回true,所以一般getopts命令使用while循環;
OPTARG是當getopts獲取到其期望的參數后存入的位置。而如果不在其期望內,則$optname被設為?並將該意外值存入OPTARG; 如果$optname需要擁有具體設置值而實際卻沒有,則$optname被設為:並將丟失設置值的optname存入OPTARG;
對於$optname,可以用后標:來表示是否需要值;而前標:則表示是否開啟靜默模式。