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命令的如何...