2015-06-29 91 views
1

我有一個bash腳本,我將參數傳入(並通過$ 1訪問)。該參數是必須處理的單個命令(即git pull,checkout dev等)。如何將可選標誌和參數傳遞給bash腳本?

我跑我的腳本像./script_name git pull

現在,我想一個可選的標誌添加到我的腳本做一些其他的功能。因此,如果我打電話給./script_name -t git pull這樣的腳本,它將具有與./script_name git pull不同的功能。

如何訪問此新標誌以及傳入的參數。我嘗試使用getopts,但似乎無法使其與傳遞到腳本中的其他非標誌參數一起使用。

+0

http://mywiki.wooledge.org/BashFAQ/035 –

回答

3

使用getopts的確實是要走的路:

has_t_option=false 
while getopts :ht opt; do 
    case $opt in 
     h) show_some_help; exit ;; 
     t) has_t_option=true ;; 
     :) echo "Missing argument for option -$OPTARG"; exit 1;; 
     \?) echo "Unknown option -$OPTARG"; exit 1;; 
    esac 
done 

# here's the key part: remove the parsed options from the positional params 
shift $((OPTIND - 1)) 

# now, $1=="git", $2=="pull" 

if $has_t_option; then 
    do_something 
else 
    do_something_else 
fi 
+0

的轉變是我失蹤了,謝謝! – mdurban