Bypass invalid options of getopts

我有一隻程式是透過python撰寫,然後透過shellscript去啟動。因為我懶得加功能在python上,所以希望能透過修改shellscript去增加新功能的選項。然而,當我透過getopts去parse輸入參數時,如果少宣告參數在getopts上,程式就會自行停止。本篇文章主要分享pypass的方法。

預設情況下getopts遇到有問題參數就會停止並顯示無效參數,要避掉這問題解法如下,

  1. 在getopts的第一個參數最前面加上:,可以把處理問題流程交給我們自己的腳本。
  2. 在?與:處理流程上執行shift,讓parse動作繼續往下。

branch=master
test_mode=false
while getopts ":b:t" OPT; do
    case $OPT in
        b) branch="$OPTARG";;
        t) test_mode=true;;
        \?) shift;;
        :) shift;;
    esac
done
這樣就可以pypass掉不想處理的項目。