shell中的getopts

在bash中,可以用以下三種方式來處理命令行參數:

  • 直接處理:使用$1,$2,...,$n進行解析
  • getopts:單個字符選項的情況(如:-f file.txt等選項)
  • getopt:可以處理單個字符選項,也可以處理長選項long-option(如:–prefix=/home等)

Linux中的位置變量和預定義變量

shell中的getopt

本篇主要聊聊getopts
說明:

  • getopts是bash的內部命令
  • getopts有兩個參數,第一個參數是一個字符串,包括字符和“:”
  • 每一個字符都是一個有效的選項(option),如果字符後面帶有“:”,表示- 這個選項有自己的argument,argument保存在內置變量OPTARG中,如果是"::",表示可選參數,可選參數後面的參數緊跟選項(如:-boptionB)
  • $OPTIND總是存儲原始$*中下一個要處理的元素位置
  • 對於while getopts ":a:bc" opt,第一個冒號表示忽略錯誤
#!/bin/bash

echo original parameters=[$*]
echo original OPTIND=[$OPTIND]
while getopts ":a:b::c" opt
do
    case $opt in
        a)
            echo "this is -a option. OPTARG=[$OPTARG] OPTIND=[$OPTIND]"
            ;;
        b)
            echo "this is -b option. OPTARG=[$OPTARG] OPTIND=[$OPTIND]"
            ;;
        c)
            echo "this is -c option. OPTARG=[$OPTARG] OPTIND=[$OPTIND]"
            ;;
        ?)
            echo "there is unrecognized parameter."
            exit 1
            ;;
    esac
done
#通過shift $(($OPTIND - 1))的處理,$*中就只保留了除去選項內容的參數,
#可以在後面的shell程序中進行處理
shift $(($OPTIND - 1))

echo remaining parameters=[$*]
echo \$1=[$1]
echo \$2=[$2]

運行結果:

sh getopts.sh -a optionA -boptionB -c optionC optionD
original parameters=[-a optionA -boptionB -c optionC optionD]
original OPTIND=[1]
this is -a option. OPTARG=[optionA] OPTIND=[3]
this is -b option. OPTARG=[optionB] OPTIND=[4]
this is -c option. OPTARG=[] OPTIND=[5]
remaining parameters=[optionC optionD]
$1=[optionC]
$2=[optionD]

解釋:
-a參數的下一個位置爲3(跳過-a後的參數),所以爲:this is -a option. OPTARG=[optionA] OPTIND=[3]
-b參數的下一個位置爲4,因爲-b後面的參數緊跟-b(中間沒有空格),所以爲5,如果-b不是可選參數而爲必選參數,則這裏的OPTIND=[5]
-c參數後的下一個位置爲5,因爲-c後不可跟參數,所以OPTIND=[5]


版權所有,轉載請註明原文鏈接。

文中有不妥或者錯誤的地方還望指出,以免誤人子弟。如果覺得本文對你有所幫助不妨【推薦】一下!如果你有更好的建議,可以給我留言討論,共同進步!

再次感謝您耐心的讀完本篇文章。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章