Linux

bash 腳本添加參數

  • April 6, 2021

我創建了一個帶有參數和參數的腳本。我想插入--help論點。

我已經知道如何用 解析普通參數-,但我不知道如何解析--那些。

要解析 的選項test.sh -h,我使用以下檢查:

while getopts ":h" opt; 
do 
case $opt in
   h ) {
           echo "help!!!"
           exit 1
   } ;;
esac
done

但我希望可以選擇使用test.sh --help.

PS 我使用的是 Ubuntu 12.04……但這並不重要。

getopts無法處理長參數:

$ ( set -- --help ; while getopts -- -help opt; do echo "$opt"; done )
-
h
e
l
p

如果要處理長參數,則需要編寫自己的解析器。

GNU 版本getopt 確實支持解析長選項,但最好不要使用它;它不是可移植的,非 GNU 版本傾向於打破某些類型的論點。例如,它們通常無法正確解析帶有空格的參數。

問題的作者提供了這個解決方案:

我在 /usr/bin 的一個 .sh 腳本中找到了解決方案

  if test $# = 1; then
    case "$1" in
      --help | --hel | --he | --h )
        func_usage; exit 0 ;;
      --version | --versio | --versi | --vers | --ver | --ve | --v )
        func_version; exit 0 ;;
    esac
  fi

Chris Down 對此的評論:

就像我說的,如果你想處理長參數,你需要編寫自己的解析器——腳本

$$ that you found $$就是一個例子。 作為記錄,您發現的腳本寫得不好。例如, --version部分匹配可以重寫為--v*)(假設你對 沒問題--vfoo)。

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