學習bash裡的getopts

2021-06-02 19:29:18 字數 3020 閱讀 9101

source:

getopts optstring varname [arg ...]

optstringoption字串,會逐個匹配

varname每次匹配成功的選項

arg引數列表,沒寫時它會取命令列引數列表

$optind特殊變數,option index,會逐個遞增

$optarg特殊變數,option argument,不同情況下有不同的值

細則1:當optstring以」:「開頭時,getopts會區分invalid option錯誤和miss option argument錯誤。

invalid option時,varname會被設成?,$optarg是出問題的option;

miss option argument時,varname會被設成:,$optarg是出問題的option。

如果optstring不以」:「開頭,invalid option錯誤和miss option argument錯誤都會使

varname被設成?,$optarg是出問題的option。

細則2:當optstring中的字母跟」:「時,表明該option可接引數,引數(argument)放在$optarg中;

如果缺引數,且optstring是以」:「開頭,則varname的值會是:,$optarg是該option,

否則varname的值是?,$optarg是該option。(參照細則1)

簡單的sample:

#!/bin/bash

skipblanks

=

tmpdir

=

/tmp

case

=lower

while getopts :bt:u arg

docase $

arg in

b)skipblanks

=

true

echo "if skip blanks? $skipblanks";;

t)if

[-d "$optarg"

]then

tmpdir

=

$optarg

echo "temp dir is $tmpdir."

else

echo "$0: $optarg is not a directory."

>

&2exit 1fi;

;u)case

=upper

echo "case sensitivity is $case.";;

:) echo "$0: must supply an argument to -$optarg."

>

&2exit 1;;

\?) echo "invalid option -$optarg ignored."

>&2;

;esac

done

source:

while getopts ":abcde:fg" option

# initial declaration.

# 開始的宣告.

# a, b, c, d, e, f, 和 g 被認為是選項(標誌).

# e 選項後邊的:提示,這個選項帶乙個引數.

docase $option in

a ) # do something with variable 'a'.

echo aaa

;;b ) #

echo bbb

;;e) # do something with 'e', and also with $optarg,

echo eee with $optarg

;;g ) # 對選項'g'作些操作.

echo ggg

;;esac

done

shift$(($optind - 1))

# 將引數指標向下移動.

複製**

注釋掉shift

$(($optind - 1))程式也照常執行,那這個有什麼用呢?

由於 $optind 總是儲存原始$*中下乙個要處理的元素位置,程式執行到這句話的時候,指標後面的引數還都是沒有處理過的,而指標前的引數已經全部處理過了。

通過shift $(($optind - 1)) 的處理,$*中就只保留了除去選項內容的引數(未處理過的引數),可以在其後進行正常的shell程式設計處理了。

下面是在網上搜到的例子:

echo $*

while getopts ":a:bc" opt

docase $opt in

a ) echo $optarg

echo $optind;;

b ) echo "b $optind";;

c ) echo "c $optind";;

? ) echo "error"

exit 1;;

esac

done

echo $optind

shift $(($optind - 1))

echo $0

echo $*

執行結果:

#./test -a 12 -bc 34

-a 12 -bc 34123

b 3c 4

4./test34

Bash 裡的轉義序列

在 bash 裡,一共有五個地方支援反斜槓開頭的轉義序列,包括兩個內部命令 echo 和 printf 的引數裡,字串語法 裡,還有四個提示符變數 ps1 ps4 裡,以及在 readline 配置檔案裡 用來自定義鍵盤快捷鍵 其中後兩者不在本文的討論範圍內,我們只看看前三個命令 語法在對某些轉義序...

getopts的用法解讀

getopts 命令 用途 處理命令列引數,並校驗有效選項。語法 getopts 選項字串 名稱 引數 getopts 命令是 korn posix shell 的內建命令,用來從引數列表檢索選項以及選項引數。選項由乙個 加號 或者是由乙個 減號 後跟乙個字元開始。乙個既不是以 也不是以 開始的選項...

shell中getopts的用法

命令格式 getopts string args var name 兩個引數 如果不是很理解,先記住其命令格式和它的兩個引數代表的意義,看下面的操作。file name test bin bash while getopts a opt docase in a echo this is a vaul...