如何检查参数是否已提供给bash脚本

nod*_*nja 64 bash

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

我发现了这一点,但所有解决方案似乎都不必要地复杂化了.

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

Ada*_*man 92

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

if [ "$#" -ne 1 ]
then
  echo "Usage: ..."
  exit 1
fi
Run Code Online (Sandbox Code Playgroud)

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

编辑:正如SiegeX在bash中指出的那样,你也可以使用算术表达式(( ... )).这可以这样使用:

if (( $# != 1 ))
then
  echo "Usage: ..."
  exit 1
fi
Run Code Online (Sandbox Code Playgroud)

  • `[]`中的表达式使用`<`,`>`,`!=`和`==`进行字符串比较和`-lt`,`-gt`,`-le`,`-ge`,` - 用于算术比较的ne`和`-eq`.`(())`中的表达式使用`<`,`>`,`!=`和`==`进行算术比较.有关更多运营商的信息,请参阅[bash手册页](http://linux.die.net/man/1/bash). (14认同)
  • 因为这是'bash`问题,我建议`if(($#!= 1))` (3认同)

h7r*_*h7r 20

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

for i in "$@" ; do
    if [[ $i == "check parameter" ]] ; then
        echo "Is set!"
        break
    fi
done
Run Code Online (Sandbox Code Playgroud)

或者,更紧凑:

for i in "$@" ; do [[ $i == "check argument" ]] && echo "Is set!" && break ; done
Run Code Online (Sandbox Code Playgroud)

  • 我不确定你的方法是否正确...例如:`./ script check参数`将成功(这是不正确的). (2认同)

jay*_*ngh 12

if (( "$#" != 1 )) 
then
    echo "Usage Info:…"
exit 1
fi
Run Code Online (Sandbox Code Playgroud)