现在的位置: 首页 > 综合 > 正文

shell 函数返回值接收问题

2013年10月25日 ⁄ 综合 ⁄ 共 1086字 ⁄ 字号 评论关闭

shell中函数的调用方式有两种,如下图:

第一种方式,有点像C语言调用函数的风格,直接把函数的执行结果复制给变量!不过,这个赋值过程和C语言的函数赋值是不一样的!

C语言中,函数调用,是将函数的返回值返回给被调函数,如:

fun()
{
     return (1+2);
}

main()
{
    a = fun();
    ...............
}

这实际上是将函数的返回值,也就是return的值复制给变量a!可是,大家注意:

shell中函数调用的第一种方式,是将标准输出传递给主程序的变量,而不是返回值!

所以请看以下程序:

#!/bin/sh 

check_user()
{
	n=`cat /etc/passwd | cut -d ":" -f 1 | grep "^$1$" -Rn | cut -d ":" -f 1`
	echo $n  
	#这里是使用echo语句,将结果输出到标准输出上,所以在主程序中可以使用变量接收

}

userinfo()
{
	userinfo=`head -$1 /etc/passwd | tail -1 | cut -d ":" -f 3,4`
	echo $userinfo
	
}

while true
do

read username
m=`check_user $username`
#使用变量接收函数check_user传递的值

if [ -n "$m" ]
then
	userinfo $m
	exit
else
	echo "$username is not exit!"

fi

done

而函数的第二种调用方式,是使用$?来接收上一程序的返回值状态,也就是return返回的值。

下面程序中,if判断后,return 0 或者 1,在这里,我们就可以使用$?接收return的值,然后

存储下来,继而进行下一步的判断!

check_user()
{
	n=`cat /etc/passwd | cut -d ":" -f 1 | grep -n "^$1$"| cut -d ":" -f 1`
	if [ -z "$n" ]
	then
		return 0
	else
		return 1
	fi
}

show_userinfo()
{
	userinfo=`head -$n /etc/passwd | tail -1 | cut -d ":" -f 1,3,4`
	echo $userinfo
}

echo  "input username : "
read username

check_user $username
num=$?

if [ $num -eq 0 ]
then
	echo "The user '$username' is not exist."
	exit
else
	show_userinfo $n
fi

上面两个程序的执行结果是一样的,但是要注意着两种函数的不同调用方式,以及其返回给

主调程序的到底是什么。明白了这一点,才能准确知道到底使用何种方式接收返回值!

抱歉!评论已关闭.