【问题标题】:How to check that a parameter was supplied to a bash script [duplicate]如何检查参数是否提供给 bash 脚本 [重复]
【发布时间】:2012-02-16 15:10:43
【问题描述】:

我只想检查我的 bash 脚本中是否提供了一个参数。

我找到了this,但所有解决方案似乎都过于复杂。

对于这个简单的问题,对于初学者来说有什么简单的解决方案?

【问题讨论】:

  • ^上面可能重复的答案与此处发布的相似,包括关于使用 [[ -z ]] 测试的评论

标签: bash


【解决方案1】:

使用$#,它等于提供的参数数量,例如:

if [ "$#" -ne 1 ]
then
  echo "Usage: ..."
  exit 1
fi

注意事项:请注意,在函数内部,这将等于提供给函数而不是脚本的参数数量。

编辑:正如SiegeX in bash 所指出的,您还可以在(( ... )) 中使用算术表达式。可以这样使用:

if (( $# != 1 ))
then
  echo "Usage: ..."
  exit 1
fi

【讨论】:

  • 因为这是bash的问题,我建议if (( $# != 1 ))
  • 对于一个范围,case 语句可能更惯用。不过,对于初学者来说,语法看起来很陌生。 case $# in [123]) ;; *) echo fail >&2; exit 1;; esac
  • [] 中的表达式使用<>!=== 进行字符串比较,使用-lt-gt-le、@987654@33 987654340@ 和 -eq 用于算术比较。 (()) 中的表达式使用 <>!=== 进行算术比较。更多运营商见bash manpage
【解决方案2】:

接受的解决方案通过测试给定的参数计数来检查是否设置了参数。如果这不是所需的检查,也就是说,如果您想检查是否设置了特定参数,则可以执行以下操作:

for i in "$@" ; do
    if [[ $i == "check parameter" ]] ; then
        echo "Is set!"
        break
    fi
done

或者,更简洁:

for i in "$@" ; do [[ $i == "check argument" ]] && echo "Is set!" && break ; done

【讨论】:

  • 我不确定你的方法是否正确……例如:./script check parameter 会成功(这是不正确的)。
  • @gniourf_gniourf 你完全正确。我编辑了一个实际上可以解决问题的解决方案。不幸的是有一个循环。
  • 你想要它紧凑,有这个奇怪的:for i do [ "$i" == ...可能只是为了迷惑人tldp
【解决方案3】:
if (( "$#" != 1 )) 
then
    echo "Usage Info:…"
exit 1
fi

【讨论】:

  • 感谢@SiegeX .. 已更新答案。出于好奇,我应该注意什么特别的区别?
  • 只是它支持高级语法,例如==!=<><=>=,它还可以像你一样在单个(( ))中执行布尔逻辑可以在C中做
猜你喜欢
  • 2015-04-06
  • 1970-01-01
  • 2017-09-24
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
相关资源
最近更新 更多