在 Bash 中解析命令列引數
Fumbani Banda
2023年1月30日
2022年5月14日
本教程演示了使用標誌、迴圈構造和移位運算子將命令列引數解析為 bash 指令碼作為位置引數。
在 Bash 中解析位置引數
位置引數按照它們傳遞給 bash 指令碼的順序進行訪問。第一個引數由 $1
訪問,第二個引數由 $2
訪問,依此類推。
echo "I am $1";
echo "And I live in $2";
使用兩個位置引數執行指令碼:
bash positional_args.sh John USA
輸出:
I am John
And I live in USA
在 Bash 中使用標誌解析引數
標誌以每個引數前的連字元 -
開頭。使用標誌時,引數的順序無關緊要。
在下面的指令碼中,getopts
從輸入中讀取標誌,OPTARG
將其與相應的值匹配。
while getopts n:c: flag
do
case "${flag}" in
n) name=${OPTARG};;
c) country=${OPTARG}
esac
done
echo "I am $name";
echo "And I live in $country";
跑:
bash flags.sh -n fumbani -c Malawi
輸出:
I am fumbani
And I live in Malawi
在 Bash 中使用迴圈結構解析引數
當引數大小事先未知時,迴圈結構很有用。$@
是一個包含所有輸入引數的變數。for
迴圈遍歷所有引數並處理傳遞的每個引數。
i=1
for arg in "$@"
do
printf "argument $i: $arg\n"
i=$((i + 1 ))
done
跑:
bash arguments_loop.sh USA Europe Africa Asia
輸出:
argument 1: USA
argument 2: Europe
argument 3: Africa
argument 4: Asia
在 Bash 中使用 shift
解析引數
shift
運算子使引數的索引從移位的位置開始。在我們的例子中,我們將引數移動 1
直到到達結尾。$#
指的是輸入大小,而 $1
每次都指的是下一個引數。
i=1
max=$#
while (( $i <= $max ))
do
printf "Argument $i: $1\n"
i=$((i + 1 ))
shift 1
done
跑:
bash shift.sh one two three
輸出:
Argument 1: one
Argument 2: two
Argument 3: three
Author: Fumbani Banda