首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash getopts验证选项

bash getopts验证选项
EN

Stack Overflow用户
提问于 2015-05-06 17:22:36
回答 1查看 1.9K关注 0票数 0

我在bash脚本中有以下代码:

代码语言:javascript
复制
# argument validation and usage help
usage()
{
cat << EOF
usage: $0 options

File Integrity Monitoring Script:

OPTIONS:
   -b      input file for [backup]
   -r      input file for [diff report]
   -l      list backup files
EOF
}

if [ $# -eq 0 ]
  then
    usage
    exit 0
fi


while getopts ":b:r:l:" o; do
    case "${o}" in
        b)
            B=${OPTARG}
            backup $B
            ;;
        r)
            R=${OPTARG}
            diffcheck $R
            ;;
        l)
            ls -ld /root/backup/* | awk -F/ '{print $(NF)}'
            ;;
        *)
            usage
            exit 0
            ;;
    esac
done
shift $((OPTIND-1))

问题:

如果使用选项-b它需要inputfile,但是-l它只需要打印目录列表而不传递任何参数,有什么简单的方法可以找出哪个选项需要argument

代码语言:javascript
复制
spatel # ./final.sh -l
usage: ./final.sh options

File Integrity Monitoring Script:

OPTIONS:
   -b      input file for [backup]
   -r      input file for [diff report]
   -l      list backup files

如果我传递任何论点,它就会起作用

代码语言:javascript
复制
spatel # ./final.sh -l xxx
May-06-15-10-03
May-06-15-10-04
May-06-15-10-19
May-06-15-11-30
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-06 17:28:44

参数中指向getopts的选项后面的getopts指示它接受一个参数。由于-l不需要选项,所以应该使用

代码语言:javascript
复制
getopts getopts ":b:r:l"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30083560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档