gpt4 book ai didi

bash - getopts - 如果标志为空 getopts 使用下一个标志

转载 作者:行者123 更新时间:2023-11-29 09:20:11 28 4
gpt4 key购买 nike

我正在尝试将 getopts 用于 bash 脚本。这个脚本可以有标志,所有这些标志都是强制性的,需要包含一个值。当本应包含值的强制标志之一为空时,getopts 使用下一行标志作为其内容。我该如何防止这种情况?

这是我的例子:

#!/bin/bash

while getopts "A:B:" OPTION
do
case $OPTION in
A)
GILIA="$GILIA $OPTARG"
echo GILIA $GILIA
;;
B)
GILIB="$GILIB $OPTARG"
echo GILIB $GILIB
;;
esac
done

当同时使用两个带值的标志时:

./test_opt2 -A aaa -B bbb
GILIA aaa
GILIB bbb

当使用“-A”标志为空时:

./test_opt2 -A  -B bbb
GILIA -B

我知道这是 getopts 的正常/典型行为,我确信有办法解决这个问题......

有什么想法吗?

最佳答案

假设:(1) 所有选项都是必需的,并且 (2) 没有参数可以以 '-' 开头,那么我将使用这样的东西:

while getopts ":a:b:" opt ; do
[[ ${OPTARG} == -* ]] && { echo "Missing argument for -${opt}" ; exit 1 ; }
case ${opt} in
a ) gilia="$gilia $OPTARG"
echo gilia $gilia
;;
b ) gilib="$gilib $OPTARG"
echo gilib $gilib
;;
\?) echo "Invalid (-${OPTARG}) option"
;;
: ) echo "Missing argument for -${OPTARG}"
;;
esac
done

您将获得:

$ ./t.sh -a aaa -b bbb 
gilia aaa
gilib bbb
$ ./t.sh -a -b bbb
Missing argument for -a
$ ./t.sh -a aaa -b
gilia aaa
Missing argument for -b
$ ./t.sh -a aaa -b bbb -c ccc
gilia aaa
gilib bbb
Invalid (-c) option

关于bash - getopts - 如果标志为空 getopts 使用下一个标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34508103/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com