【问题标题】:bash getopts multiple arguments or default valuebash getopts 多个参数或默认值
【发布时间】:2014-03-30 06:43:39
【问题描述】:

所以我有一个关于在 bash 中获取选择的问题。如果参数存在,我想获取参数的值,但如果它们不存在,则使用默认值。所以脚本应该接受一个目录和一个整数,但如果没有指定它们,那么 $PWD 和 3 应该是默认值。这是什么

while getopts "hd:l:" opt; do
    case $opt in
        d ) directory=$OPTARG;;
        l ) depth=$OPTARG;;
        h ) usage
        exit 0;;
        \? ) usage
        exit 1;;
    esac

【问题讨论】:

    标签: bash shell scripting getopts


    【解决方案1】:

    你可以在while循环之前提供默认值:

    directory=mydir
    depth=123
    while getopts "hd:l:" opt; do
        case $opt in
            d ) directory=$OPTARG;;
            l ) depth=$OPTARG;;
            h ) usage
            exit 0;;
            *) usage
            exit 1;;
        esac
    done
    echo "<$directory> <$depth>"
    

    【讨论】:

    • 所以我这样做了(完全有道理),但目录和深度永远不会改变
    • 因此,如果参数存在,那么我想将变量目录更改为传递给选项 -d 的任何内容,但如果它不存在,则将其保留在当前工作目录中。
    • 你可以这样做 -d ) cd "$OPTARG";;
    • 有没有办法检查它是否有效?
    • 它确实发生了变化,但 shell 脚本在子 shell 中运行,因此更改的目录不会反映在父 shell 中
    【解决方案2】:

    在你的 getopts 之后,试试这个

    如果 [ -z "$directory" ];然后目录=“目录”;菲

    -z 表示变量 $directory 是否为空或为空。然后如果用户没有为 -d 输入参数,那么脚本将默认为 directory="/whatever/files/"

    至少如果我正确理解您的问题,如果未输入值,这应该为您提供 -d 的默认值。

    【讨论】:

    • 请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。
    猜你喜欢
    • 2014-03-09
    • 2019-05-15
    • 1970-01-01
    • 2019-10-16
    • 2017-01-11
    • 2013-04-17
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多