【问题标题】:Shell how to make some of the script arguments mandatoryShell 如何使某些脚本参数成为强制性的
【发布时间】:2022-02-06 16:45:09
【问题描述】:

我想运行一个接受 3 个命令行选项-o|q|i 的脚本。我想让qo 而不是i 所以运行命令 has 看起来像:

script.sh -q <some-text> -o <some-other-text>

下面的代码没有强制要求。我怎样才能做到这一点?

 for arg in "$@"
    do
        case $arg in
            -q) req="$2"
            shift  shift ;;
            -o) out="$2"
            shift  shift ;;
            -i|) ind="$2"
            shift  shift ;;
        esac
    done

【问题讨论】:

  • @thatotherguy 如果未设置,我该如何显示-help 标志?
  • 你可能想看看getopts
  • 您混合了两种不同(不兼容)的参数解析方式,for 循环和shift/$2 方法。请改用getopts - 请参阅BashFAQ #35tzelleke's answer here。更多示例(和更复杂的方法)here.
  • options 不是 optional 是没有意义的。
  • @tripleee 似乎是您正确的语义点?或者您是否暗示这不是在 shell 中设置强制参数的方法?我对其他想法持开放态度。

标签: bash shell command-line-arguments


【解决方案1】:

我通过使用以下代码检查变量 reqout 在 for 循环之后是否具有某些值来完成这项工作:

  if [[ -z $out  ||  -z $req ]]
  then
    echo "ERROR: -q  and -o are mandatory arguments. See usage: \n";
    exit 1;
  fi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    相关资源
    最近更新 更多