我已经知道getopts,这很好,但令人讨厌的是,即使是强制性参数,你也必须有一个标志。
理想情况下,我想要有一个脚本可以接收以下形式的参数:
script.sh [optional arguments] [anything required]
例如
script.sh -rvx output_file.txt
脚本说你有一个输出文件。有没有办法做到这一点?
据我所知,使用getopts,它必须看起来像:script.sh -rvx -f output_file.txt,那只是不是很干净。
如果需要,我也可以使用python,但只有2.4可用,这是一个有点过时。
不要使用getopts builtin,请改用getopt(1)。他们(细微)不同,做不同的事情很好。对于您的情况,您可以这样做:
#!/bin/bash eval set -- $(getopt -n $0 -o "-rvxl:" -- "$@") declare r v x l declare -a files while [ $# -gt 0 ] ; do case "$1" in -r) r=1 ; shift ;; -v) v=1 ; shift ;; -x) x=1 ; shift ;; -l) shift ; l="$1" ; shift ;; --) shift ;; -*) echo "bad option '$1'" ; exit 1 ;; *) files=("${files[@]}" "$1") ; shift ;; esac done if [ ${#files} -eq 0 ] ; then echo output file required exit 1 fi [ ! -z "$r" ] && echo "r on" [ ! -z "$v" ] && echo "v on" [ ! -z "$x" ] && echo "x on" [ ! -z "$l" ] && echo "l == $l" echo "output file(s): ${files[@]}"
编辑:为了完整,我提供了一个处理需要参数的选项的例子。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。