如何创建一个引用参数的bash脚本?

前端之家收集整理的这篇文章主要介绍了如何创建一个引用参数的bash脚本?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经知道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[@]}"

编辑:为了完整,我提供了一个处理需要参数的选项的例子。

猜你在找的Bash相关文章