終端命令通常包含一些參數(shù),在使用的時候可以提供不同的參數(shù)來確定命令的執(zhí)行方式。POSIX規(guī)范中包含了用于命令行接口的選項。這也是與最早的UNIX應(yīng)用程序建立的一個由來已久的約定,所以當(dāng)你在寫bash腳本的時候,需要知道如何在腳本中接受參數(shù)。
bash中的參數(shù)(選項)解析
Bash中解析選項的策略是循環(huán)遍歷傳遞給shell腳本的所有參數(shù),確定它們是不是選項,然后切換到下一個參數(shù)。重復(fù)此過程,直到?jīng)]有剩余選項。
從一個簡單的布爾選項(有時稱為開關(guān)或標志)開始:
#!/bin/bash
while [ True ]; do
if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
ALPHA=1
shift 1
else
break
fi
done
echo $ALPHA
在這段代碼中,我創(chuàng)建了一個while循環(huán),它作為一個無限循環(huán),直到?jīng)]有更多的參數(shù)要處理為止。if語句嘗試將在第一個位置($1)找到的任何參數(shù)與--alpha或-a匹配(這些是沒有特殊意義的任意選項名稱。在實際腳本中,可以使用--verbose和-v來觸發(fā)詳細輸出)。
shift關(guān)鍵字使所有參數(shù)移位1,這樣位置2($2)中的參數(shù)將移動到位置1($1)。當(dāng)沒有其他參數(shù)要處理時,將觸發(fā)else語句,這將中斷while循環(huán)。
在腳本的末尾,將$ALPHA的值打印到終端。
測試一下這個腳本:
$ bash ./test.sh --alpha
1
$ bash ./test.sh
$ bash ./test.sh -a
1
已正確檢測到該選項。
檢測Bash中的參數(shù)
但有一個問題:額外的參數(shù)被忽略。
$ bash ./test.sh --alpha foo
1
$
要捕獲不作為選項的參數(shù),可以將剩余參數(shù)轉(zhuǎn)儲到Bash數(shù)組中。
#!/bin/bash
while [ True ]; do
if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
ALPHA=1
shift 1
else
break
fi
done
echo $ALPHA
ARG=( "${@}" )
for i in ${ARG[@]}; do
echo $i
done
測試一下修改后的腳本:
$ bash ./test.sh --alpha foo
1
foo
$ bash ./test.sh foo
foo
$ bash ./test.sh --alpha foo bar
1
foo
bar
帶參數(shù)的選項
有些選項本身需要一個參數(shù)。例如,您可能希望允許用戶設(shè)置圖形的顏色或分辨率等屬性,或者將應(yīng)用程序指向自定義配置文件。
要在Bash中實現(xiàn)這一點,可以像使用布爾開關(guān)一樣使用shift關(guān)鍵字,但將參數(shù)移位2而不是1。
#!/bin/bash
while [ True ]; do
if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
ALPHA=1
shift 1
elif [ "$1" = "--config" -o "$1" = "-c" ]; then
CONFIG=$2
shift 2
else
break
fi
done
echo $ALPHA
echo $CONFIG
ARG=( "${@}" )
for i in ${ARG[@]}; do
echo $i
done
在這段代碼中,我添加了一個elif子句來將每個參數(shù)與--config和-c進行比較。在匹配的情況下,名為CONFIG的變量的值被設(shè)置為第二個參數(shù)的值(這意味著--CONFIG選項需要一個參數(shù))。所有參數(shù)移位2:1移位--config或-c,1移位其參數(shù)。與往常一樣,循環(huán)會重復(fù),直到?jīng)]有匹配的參數(shù)。
下面是對新版本腳本的測試:
$ bash ./test.sh --config my.conf foo bar
my.conf
foo
bar
$ bash ./test.sh -a --config my.conf baz
1
my.conf
baz
選項解析變得很容易
在Bash中還有其他解析選項的方法。您可以交替使用case語句或getopt命令。無論您選擇使用什么,用戶的選項都是任何應(yīng)用程序的重要特性,Bash使其變得簡單。
-
參數(shù)
+關(guān)注
關(guān)注
11文章
1657瀏覽量
31873 -
腳本
+關(guān)注
關(guān)注
1文章
382瀏覽量
14760 -
Bash
+關(guān)注
關(guān)注
0文章
57瀏覽量
10134
發(fā)布評論請先 登錄
相關(guān)推薦
評論