【问题标题】:Setting default with getopts in bash在 bash 中使用 getopts 设置默认值
【发布时间】:2014-08-28 06:35:39
【问题描述】:

我正在尝试使用 bash 代码将一些 python 代码组合在一起,并希望能够提供多个选项来接受您可以通过命令行输入的值。为此,我正在尝试使用 getopts,但在尝试设置默认值时遇到问题。

我在网上看到过这个问题,之前也有人问过类似的问题,我尝试在主 getopts 代码之后使用冒号选项等答案,并在之前放置一个默认值,这导致了以下代码:

!/bin/bash

usage() { echo "Usage: $0 [-f <string] [-r <string>] [-t <string>] [-o <string>] [-s <5|10> [-e <1|2|3>] [-b <string>] [-q <string>]]" 1>&2; exit 1; }

q = "30"

b = "15"


while getopts ":f:r:t:o:s:e:b:q:" p; do
    case "${p}" in
        f)
            f=${OPTARG}

            ;;
        r)
            r=${OPTARG}
            ;;

        t)
            t=${OPTARG}
            ;;

        o)
            o=${OPTARG}
            ;;

        s)
            s=${OPTARG}
            ((s == 5 || s == 10)) || usage
            ;;

        e)
            e=${OPTARG}
            ((e == 1 || e == 2 || e == 3)) || usage
            ;;

        b)
            b=${OPTARG}
            ;;
        q)
            q=${OPTARG}
            ;;

        *)
            usage
            ;;
    esac
done

: ${q = 30}

: ${b = 15}

shift $((OPTIND-1))

if [ -z "${f}" ] || [ -z "${r}" ] || [ -z "${t}" ] || [ -z "${o}" ] || [ -z "${s}" ] || [ -z "${e}" ] || [-z "${b}"] || [-z "${q}"]; then
    usage
fi

b2 = ${b} + 2

echo "The following are your options."
echo "reverse read file = ${r}"
echo "forward read file = ${f}"
echo "type of file = ${t}"
echo "output identifier = ${o}"
echo "number of splits wanted (s) = ${s}"
echo "You have chosen to complete ${e} rounds of joining"
echo "Your have chosen that a consensus region of ${b} bases is needed for a match to be made."
if ["${e}" == 3]; then
  echo " For quality trimming you have select threshold cut off at ${q}"
fi

如上所述,我以前从未使用过 getopts,如果有人能解释我如何更正我的代码以设置 b 和 q 选项的默认值,我将不胜感激。

【问题讨论】:

    标签: bash getopts


    【解决方案1】:

    在 shell 分配中= 周围没有空格!

    错误

    q = "30"
    

    q="30"
    

    错误的代码执行带有参数=30 的命令q。这不是本意。

    类似:

    : ${q = 30}
    

    应该是:

    : ${q=30}
    

    和相关但有些不同:

    b2 = ${b} + 2
    

    可能是:

    b2=$((${b} + 2))
    b2="${b} + 2"
    

    (或许多次要变体),但请注意,它们的结果非常不同。

    【讨论】:

    • 非常感谢您向我解释这一点,现在可以正常工作了。总是忘记间距在 bash 中的重要性!
    猜你喜欢
    • 2014-03-09
    • 2014-03-30
    • 2017-01-11
    • 2019-10-16
    • 2019-03-30
    • 2019-05-15
    • 2014-03-12
    • 1970-01-01
    • 2012-10-24
    相关资源
    最近更新 更多