我需要检查输入参数的存在。我有以下脚本

if [ "$1" -gt "-1" ]
  then echo hi
fi

我明白了

[: : integer expression expected

如何首先检查输入参数1以查看它是否存在?


当前回答

在某些情况下,您需要检查用户是否向脚本传递了参数,如果没有,则返回默认值。如以下脚本所示:

scale=${2:-1}
emulator @$1 -scale $scale

在这里,如果用户没有通过scale作为第二个参数,我默认使用scale 1启动Android模拟器${varname:-word}是一个扩展运算符。还有其他扩展运营商:

${varname:=word},它设置未定义的varname而不是返回word值;${varname:?message},如果已定义且不为空,则返回varname,或者打印消息并中止脚本(如第一个示例);${varname:+word},仅当varname已定义且不为空时才返回word;否则返回null。

其他回答

在某些情况下,您需要检查用户是否向脚本传递了参数,如果没有,则返回默认值。如以下脚本所示:

scale=${2:-1}
emulator @$1 -scale $scale

在这里,如果用户没有通过scale作为第二个参数,我默认使用scale 1启动Android模拟器${varname:-word}是一个扩展运算符。还有其他扩展运营商:

${varname:=word},它设置未定义的varname而不是返回word值;${varname:?message},如果已定义且不为空,则返回varname,或者打印消息并中止脚本(如第一个示例);${varname:+word},仅当varname已定义且不为空时才返回word;否则返回null。

最好这样演示

if [[ $# -eq 0 ]] ; then
    echo 'some message'
    exit 1
fi

如果参数太少,通常需要退出。

只是因为有更多的基点需要指出,所以我补充说,您可以简单地测试字符串是否为空:

if [ "$1" ]; then
  echo yes
else
  echo no
fi

同样,如果您期望arg计数,只需测试最后一个:

if [ "$3" ]; then
  echo has args correct or not
else
  echo fixme
fi

以此类推,使用任何arg或var

它是:

if [ $# -eq 0 ]
  then
    echo "No arguments supplied"
fi

$#变量将告诉您脚本传递的输入参数的数量。

或者,您可以检查参数是否为空字符串或类似于:

if [ -z "$1" ]
  then
    echo "No argument supplied"
fi

z开关将测试“$1”的扩展是否为空字符串。如果它是空字符串,则执行主体。

在我的情况下(有7个参数),唯一有效的解决方案是检查最后一个参数是否存在:

if [[ "$7" == '' ]] ; then
  echo "error"
  exit
fi