我正在编写一个接受命令行参数的 Bash 脚本,但不仅仅是一次一个,而是一次所有的,使用 case 语句。
到目前为止,这是我的代码
while [ $# -gt 0 ]
do
case "$1" in
-n|--name)
name="$2"
;;
-s|--size)
size="$2"
;;
-l|--location)
location="$2"
;;
esac
done
Run Code Online (Sandbox Code Playgroud)
这段代码一次只接受一个,我需要它能够指定任意数量的。
使用时,getopt您可以按如下方式解决您的任务:
OPTS=`getopt -o n:s:l: --long name:,size:,location: -- "$@"`
eval set -- "$OPTS"
Run Code Online (Sandbox Code Playgroud)
这将原始位置参数拆分为选项(带参数,用冒号表示)和剩余参数,这两个参数都可能被引用。之后对 的结果进行getopt评估并将set -- $OPTS位置参数$1, $2, $3, ... 设置为getopt获得的结果。之后,我们可以循环遍历位置参数(并在遇到--将选项与脚本的其余参数分开时立即停止)。
while true
do
case "$1" in
-n|--name)
name="$2"
shift 2
;;
-s|--size)
size="$2"
shift 2
;;
-l|--location)
location="$2"
shift 2
;;
--)
shift
break
;;
*)
echo "Internal error!"
exit 1
esac
done
echo -e "name: $name\nsize: $size\nlocation: $location"
Run Code Online (Sandbox Code Playgroud)