Reputation: 56
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
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
Reputation: 37782
Your test should be:
if [ -n "$1" ]
instead of if [ -z $1 ]
NOTE you best add the quotes around $1; else it will not work when you pass no argument.
Upvotes: 6