Why doe the shell script does not accept first argument

686 views Asked by At

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
2

There are 2 answers

0
William Pursell On

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
}
1
Chris Maes On

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.