加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – getopts – 如果标志为空,则getopts使用下一个标志

发布时间:2020-12-16 01:49:14 所属栏目:安全 来源:网络整理
导读:我正在尝试将getopts用于bash脚本.此脚本可以有标志,所有这些标志都是必需的,需要包含一个值.当其中一个应该包含值的强制标志为空时,getopts使用next-in-line标志作为其内容.我该如何防止这种情况? 这是我的例子: #!/bin/bashwhile getopts "A:B:" OPTIONd
我正在尝试将getopts用于bash脚本.此脚本可以有标志,所有这些标志都是必需的,需要包含一个值.当其中一个应该包含值的强制标志为空时,getopts使用next-in-line标志作为其内容.我该如何防止这种情况?

这是我的例子:

#!/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的正常/典型行为,我确信有办法解决这个问题……

有任何想法吗?

解决方法

你可以做的是检查$OPTARG的值.如果以 – 开头,则减小索引$OPTIND的值,以便 – 下一次循环时选择 – 参数作为OPTION.

在第二个示例中,处理空-A参数时,$OPTIND将设置为3.我的代码将值设置回2,以便接下来处理-B.

case $OPTION in
    A)
        arg=${OPTARG#-}
        if [ $arg == $OPTARG ]
        then
            GILIA="$GILIA $OPTARG"
            echo GILIA $GILIA
        else
            echo "-A needs argument"
            OPTIND=$OPTIND-1
        fi
        ;;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读