如何检查bash中是否提供了参数?

时间:2014-03-29 01:42:53

标签: linux bash if-statement arguments echo

我想知道是否提供了参数。但我不知道为什么这段代码不起作用。我做错了什么?

   if ![ -z "$1" ]
   then
        echo "$1"
   fi

2 个答案:

答案 0 :(得分:6)

我们问shellcheck

In file line 1:
if ![ -z "$1" ]
    ^-- SC1035: You need a space here.

换句话说:

if ! [ -z "$1" ]
then
     echo "$1"
fi

如果根据你的评论,它仍然不起作用而你碰巧在函数中执行此操作,函数的参数将掩盖脚本的参数,我们必须明确地传递它们:

In file line 8:
call_it
^-- SC2119: Use call_it "$@" if function's $1 should mean script's $1.

答案 1 :(得分:4)

您可以检查给定参数的数量。 $#表示传递给脚本或函数的参数数量 - 或包含参数的数组的长度。如果它为零则没有传递任何参数。以下是关于positional parameters的一般信息。

$ cat script
#!/usr/bin/env bash

if (( $# == 0 )); then
    echo "No parameters provided"
else
    echo "Number of parameters is $#"
fi

结果:

$ ./script
No parameters provided
$ ./script first
Number of parameters is 1
$ ./script first second
Number of parameters is 2

如果您想检查使用函数传递给脚本的参数,那么您必须向函数提供脚本参数:

$ cat script
#!/usr/bin/env bash

_checkParameters()
{
    if (( $1 == 0 )); then
        echo "No parameters provided"
    else
        echo "Number of parameters is $1"
    fi
}

_checkParameters $#

这将返回与第一个示例中相同的结果。

还相关:What are the special dollar sign shell variables?