在 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