为什么shell脚本不接受第一个参数

时间:2015-01-06 13:13:33

标签: bash shell bash-function

我是unix shell脚本的新手。我试图用参数执行样本函数,但是shell不会将第一个参数识别为第一个参数而是识别为第二个参数。

#!/bin/bash
func(){
    echo "func"
    if [ -z $1 ]
    then echo "$1 received"
    else echo "not received"
    fi
    }
func "hello"

给出输出     FUNC     没收到

应该在哪里给出

func
hello received

2 个答案:

答案 0 :(得分:6)

您的测试应该是:

if [ -n "$1" ]

而不是if [ -z $1 ]

  • -n:变量不为空
  • -z:变量为空

注意您最好在$ 1附近添加报价;否则,当你不传递任何参数时它将无法工作。

答案 1 :(得分:3)

有几种方法可以做到这一点。我的偏好是:

#!/bin/bash
func(){ echo ${1:-no argument} passed; }
func "hello"
func ""
func

在此示例中,第二个调用将写入“no argument passed”。如果要更改行为,请在函数定义中的1后删除冒号。您当然可以使用test -n "$1"test[相同,但您不需要终止]参数)但检查值更合适$#,它给出了传递给函数的参数数量的计数。

func() { 
    if test $# -lt 1; then
        echo no argument passed
    else
        echo at least one argument passed
    fi
}