Linux 使用getopts命令獲取命令列引數

2021-08-04 14:28:45 字數 2368 閱讀 9206

linux getopts命令用於獲取命令列中的引數

呼叫格式:

getopts option_string variable

引數說明:

option_string 選項名稱

variable 選項的值

選項之間使用冒號:分隔,也可以直接連線, : 表示選項後面有傳值。

當getopts命令發現冒號後,會從命令列該選項後讀取該值。如該值存在,將儲存在特殊的變數optarg中。

當option_string用:開頭,getopts會區分invalid option錯誤和miss option argument錯誤。

invalid option時, varname會被設成?

miss option argument時,varname會被設成:

如果option_string不用:開頭,invalid option錯誤和miss option argument錯誤都會使varname被設成?。

getopts包含兩個內建變數,optarg和optind

optarg 儲存選項後的引數值

optind 表示命令行下乙個選項或引數的索引

#!/bin/bash

while

getopts a:b:c:d opts; do

case

$opts

in a) a=$optarg ;;

b) b=$optarg ;;

c) c=$optarg ;;

d) d=$optarg ;;

?) ;;

esac

done

echo

"a=$a"

echo

"b=$b"

echo

"c=$c"

echo

"d=$d"

exit

0

執行輸出

./test.sh -a1-b

2-c3-d

4a=1b=

2c=3d=

option_string a:b:c:d

a,b,c後都有:,d後沒有:

所以可以獲取到a,b,c的值

上例中,如果a,b,c任意乙個沒有傳值,將會提示出錯。例如 -c 不傳值。

./test.sh -a

1 -b 2 -c

./test.sh: option requires an argument -- c

a=1b=2

c=d=

我們在option_string前加上:,則可以遮蔽這個錯誤。

#!/bin/bash

while

getopts :a:b:c:d opts; do

case

$opts

in a) a=$optarg ;;

b) b=$optarg ;;

c) c=$optarg ;;

d) d=$optarg ;;

?) ;;

esac

done

echo

"a=$a"

echo

"b=$b"

echo

"c=$c"

echo

"d=$d"

exit

0

執行輸出

./test.sh -a 1 -b 2 -c

a=1b=2

c=d=

在option_string前加上:,可以遮蔽缺失傳值的錯誤,但如果缺失的是前面選項的值,那麼獲取到的值將會錯誤。

例如缺失a的傳值,命令會把-a後的-b作為了-a的值,導致錯誤。

./test.sh -a -b 2 -c 3

a=-b

b=c=

d=

因此使用getopts命令時,對於沒有傳值的選項,選項名稱也不要加入命令列中。

例如a不傳值,則-a不要加入命令列。

./test.sh -b 2 -c 3

a=b=2

c=3d=

linux的getopts命令並不支援多個字元組合的引數名稱(longopts),如需要獲取long opts引數,可以使用php的getopt方法實現,參考:《php cli模式下獲取引數的方法》

shell條件getopts使用

一 簡介 在linux命令中,我們通常會見到linux命令後,加引數 a或 ab等寫法,也就是指定命令的行為及傳遞引數。這就借助了getopts來獲取命令引數。二 使用 例如,編寫如下指令碼getopts study.sh usr bin env bash 讀取引數到opt中 whilegetopt...

shell指令碼中使用getopts處理多命令列選項

在linux系統中,許多命令都提供了選項,使用不同的選項就會得到不通的執行結果 例如 ls命令,ls命令提供了多個選項 l a a h i等等,每個選項具有不同的功能,我們自己寫指令碼時也可以定義選項,提示使用者如何使用,本文介紹如何使用getopts命令來處理命令選項。1.getopts命令的如何...

Shell指令碼中使用getopts處理多命令列選項

在linux系統中,許多命令都提供了選項,使用不同的選項就會得到不通的執行結果 例如 ls命令,ls命令提供了多個選項 l a a h i等等,每個選項具有不同的功能,我們自己寫指令碼時也可以定義選項,提示使用者如何使用,本文介紹如何使用getopts命令來處理命令選項。1.getopts命令的如何...