2017-08-25 125 views
0

我試圖使用getopts的是這樣的:如何在bash腳本中使用getopts?

#!/bin/bash 

while getopts "i" option 
do 
case "${option}" 
in 
i) INT=${OPTARG};; 
esac 
done 
echo "$INT" 

但它打印$ INT只有當我使用getopts "i:"。如果我理解正確,optstring中的冒號表示相應標誌需要值。但是我想讓這個標誌可選。 任何人都可以解釋爲什麼腳本像這樣行事,我該如何解決它?

+1

冒號的存在意味着需要選項參數。預計沒有結腸意味着沒有選擇權。 ['getopts'](http://www.gnu.org/software/bash/manual/bash.html#index-getopts)上的Bash手冊不支持可選參數。爲此,你需要GNU'getopt'(帶有許多不同的語義)。 –

+0

@JonathanLeffler啊,非常感謝。我想我需要刪除我的問題,因爲它無法回答。 – kusayu

+0

查看相關問題[在Bash shell腳本中使用'getopts'來獲取長命令行和短命令行選項](https://stackoverflow.com/questions/402377/using-getopts-in-bash-shell-script-to-get - 長和短的命令行選項)。它不是直接重複的,但包含有用的信息。 –

回答

1

你不能這樣做(bash getopts)這樣的選擇。 「getopts」不支持強制或可選選項。 您需要爲此編碼。 如果指定了「:」,那麼需要有該參數的參數。沒有辦法繞過它。

以下代碼片段顯示瞭如何檢查強制參數。

# Mandatory options 
arg1=false; 
.. 
... 
case "${option}" 
in 
i) INT=${OPTARG}; arg1=true; 
;; 
esac 
if ! $arg1; 
then 
    echo -e "Mandatory arguments missing"; 
    # assuming usage is defined 
    echo -e ${usage}; 
    exit 1; 
fi