user2290411
user2290411

Reputation: 56

Why doe the shell script does not accept first argument

I am new to unix shell scripting. I am trying to execute sample function with arguments but the shell does not recognize the first argument as first but rather as second.

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

gives output func not received

where it should have given

func
hello received

Upvotes: 0

Views: 706

Answers (2)

William Pursell
William Pursell

Reputation: 212514

There are a few ways to do this. My preference is:

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

In this example, the second call will write "no argument passed". If you want to change the behavior, remove the colon after the 1 in the function definition. You can certainly use test -n "$1" (test is the same as [, except that you do not need a terminating ] argument) but it would be more appropriate to check the value of $#, which gives a count of the number of arguments passed to the function.

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

Upvotes: 3

Chris Maes
Chris Maes

Reputation: 37782

Your test should be:

if [ -n "$1" ]

instead of if [ -z $1 ]

  • -n: variable is not empty
  • -z: variable is empty

NOTE you best add the quotes around $1; else it will not work when you pass no argument.

Upvotes: 6

Related Questions