如何创建一个引用参数的bash脚本?
发布时间:2020-12-15 19:19:16 所属栏目:安全 来源:网络整理
导读:我已经知道getopts,这很好,但令人讨厌的是,即使是强制性参数,你也必须有一个标志。 理想情况下,我想要有一个脚本可以接收以下形式的参数: script.sh [optional arguments] [anything required] 例如 script.sh -rvx output_file.txt 脚本说你有一个输
我已经知道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[@]}" 编辑:为了完整,我提供了一个处理需要参数的选项的例子。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |