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

如何创建一个引用参数的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[@]}"

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

(编辑:李大同)

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

    推荐文章
      热点阅读