昨天介紹了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