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

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

我明白了

[: : integer expression expected

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


当前回答

如果要检查参数是否存在,可以检查参数的#是否大于或等于目标参数编号。

下面的脚本演示了这是如何工作的

测试.sh

#!/usr/bin/env bash

if [ $# -ge 3 ]
then
  echo script has at least 3 arguments
fi

产生以下输出

$ ./test.sh
~
$ ./test.sh 1
~
$ ./test.sh 1 2
~
$ ./test.sh 1 2 3
script has at least 3 arguments
$ ./test.sh 1 2 3 4
script has at least 3 arguments

其他回答

更现代

#!/usr/bin/env bash

if [[ $# -gt 0 ]]
  then echo Arguments were provided.
  else echo No arguments were provided.
fi

Try:

 #!/bin/bash
 if [ "$#" -eq  "0" ]
   then
     echo "No arguments supplied"
 else
     echo "Hello world"
 fi

我经常将这段代码用于简单的脚本:

#!/bin/bash

if [ -z "$1" ]; then
    echo -e "\nPlease call '$0 <argument>' to run this command!\n"
    exit 1
fi

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

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

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