【问题标题】:Checking for lack of flags in bash检查 bash 中是否缺少标志
【发布时间】:2015-03-10 19:09:52
【问题描述】:

如果我要做这样的事情来处理 bash 中的参数,我将如何检查是否没有参数?它似乎没有转到 *) 案例,但我仍然想在某处放一个使用声明。

while getopts 'ias' flag; do
  case "${flag}" in
    i) ifl='true' ;;
    m) afl='true' ;;
    n) sfl='true' ;;
    *) error "Invalid option ${flag}" ;;
  esac
done

【问题讨论】:

  • 在循环之后检查OPTIND 以找到第一个非选项参数,看看这是否是第一个参数?或者,如果没有任何合法的非选项参数,只需在循环前检查 $#
  • @EtanReisner 谢谢,我认为检查 $# 听起来像是我需要的。说清楚点,$#代表选项的个数?

标签: bash scripting sh getopts


【解决方案1】:

在while循环之前,这样做

if (( $# == 0 )); then
    echo "you must specify one of -i or -a or -s"
    exit 1
fi

或者,在while循环之后,你可以这样做

if [[ $ifl != true && $afl != true && $sfl != true ]]; then
    echo "you must specify one of -i or -a or -s"
    exit 1
fi

【讨论】:

  • 谢谢,第二个看起来最符合我的需求,因为它必须至少有三个参数中的一个,如果我理解正确,第一个不会打印使用说明,如果有的话垃圾参数。
猜你喜欢
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
  • 2016-06-18
  • 1970-01-01
  • 2020-02-20
相关资源
最近更新 更多