协慌网

登录 贡献 社区

检查 Bash shell 脚本中是否存在输入参数

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

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

我明白了

[: : integer expression expected

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

答案

它是:

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

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

或者您可以检查参数是否为空字符串或不是:

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

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

最好以这种方式进行演示

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

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

在某些情况下,您需要检查用户是否将参数传递给脚本,如果没有,则返回默认值。如下面的脚本:

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

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

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