iT邦幫忙

DAY 27
2

我與BASH shell scripting的每一天系列 第 27

我與BASH的每一天 - [27] getopts 的錯誤控制設計

昨天介紹了getopts的用法,今天進一步的來看如何針對getopts來進行錯誤處理。
昨天介紹了getopts的用法,今天進一步的來看如何針對getopts來進行錯誤處理。如果您想要讓您的程式更user friendly,您或許可以加上適當的錯誤控制設計,也就是當使用者的選項動作錯誤時,適時的顯示提醒。這樣不僅讓使用者更方便操作,更能增加程式處理使用者錯誤輸入的控制能力。

要加上針對每一個參數的錯誤控制功能,首先要在原本的getopts參數旗標字串的一開始加上冒號**:(由原本的“a:b:c:?”變成“:a:b:c:?”),接著再利用case**來分別處理每一個參數要對應的錯誤動作。

while getopts “:a:b:c:?” argv
do
     case $argv in
         a)
             VAR1=$OPTARG
             ;;
         b)
             VAR2=$OPTARG
             ;;
         c)
             VAR3=$OPTARG
             ;;
         \?)
             usage
             ;;
          :)
             case $OPTARG in
                 a) echo “Error about -a option”
                    usage
                    ;;
                 b) echo “Error about -b option”
                    usage
                    ;;
                 c) echo “Error about -c option”
                    usage
                    ;;
                 *) echo “Unexpected error”
                    usage
                    ;;
             esac
         exit 2
     esac
done

可以看出來,我在第一個case選項中多加了**:的項目,而程式會走到這裡就代表使用者輸入的參數不完整,接下來在:的項目中的case選項就根據每個參數的不同,提供了不同的錯誤訊息,以及執行usage函數來提示用法。最後一項***的選項代表以上皆非的情形。

[系列文章]

我與BASH的每一天 - [1]利用bc命令來取得數字字串中的特定欄位值
我與BASH的每一天 - [2]直取字串變數中的特定欄位值
我與BASH的每一天 - [3] 利用awk來擷取特定欄位
我與BASH的每一天 - [4] 利用awk來擷取特定欄位-2
我與BASH的每一天 - [5] 利用awk來擷取特定欄位-3
我與BASH的每一天 - [6] 利用cut來擷取特定欄位
我與BASH的每一天 - [7] grep指令的妙用 - 1
我與BASH的每一天 - [8] grep指令的妙用 - 2
我與BASH的每一天 - [9] 正規化表示法 - 1
我與BASH的每一天 - [10] 正規化表示法 - 2
我與BASH的每一天 - [11] 正規化表示法 - 3
我與BASH的每一天 - [12] 正規化表示法 - 4
我與BASH的每一天 - [13] sed - 1
我與BASH的每一天 - [14] sed - 2
我與BASH的每一天 - [15] sed - 3
我與BASH的每一天 - [16] 多條件選擇 - case
我與BASH的每一天 - [17] 建立自動化的暫存檔 - mktemp
我與BASH的每一天 - [18] if 條件判斷的正規化用法
我與BASH的每一天 - [19] 複合式的條件判斷
我與BASH的每一天 - [20] 代表參數位置的特殊變數符號與shift
我與BASH的每一天 - [21] 特殊的參數變數符號: $@ 與 $*
我與BASH的每一天 - [22] while-loop與array的結合
我與BASH的每一天 - [23] 顯示程式執行的進度
我與BASH的每一天 - [24] 打包initrd image
我與BASH的每一天 - [25] 紀錄鍵盤動作的命令 - script
我與BASH的每一天 - [26] 使用者參數選項 - getopts


上一篇
我與BASH的每一天 - [26] 使用者參數選項 - getopts
下一篇
我與BASH的每一天 - [28] 分割檔案 - split
系列文
我與BASH shell scripting的每一天31

1 則留言

我要留言

立即登入留言