首页 > 代码库 > SHELL函数处理
SHELL函数处理
SHELL函数调用分为两种:
第一种方式,有点像C语言调用函数的风格,直接把函数的执行结果复制给变量!不过,这个赋值过程和C语言的函数赋值是不一样的!
C语言中,函数调用,是将函数的返回值返回给被调函数,如:
fun(){ return (1+2);}main(){ a = fun(); ...............}
这实际上是将函数的返回值,也就是return的值复制给变量a!可是,大家注意:shell中函数调用的第一种方式,是将标准输出传递给主程序的变量,而不是返回值!请看以下程序 test.sh:
#!/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 truedo read username m=`check_user $username` #使用变量接收函数check_user传递的值 if [ -n "$m" ] then userinfo $m exit else echo "$username is not exit!" fidone
测试代码:
[qiu.li@l-tdata1.tkt.cn6 ~]$ ./test.sh dddd is not exit!qiu.li40006:1004
而函数的第二种调用方式,是使用$?来接收上一程序的返回值状态,也就是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 usernamecheck_user $usernamenum=$?if [ $num -eq 0 ]then echo "The user ‘$username‘ is not exist." exitelse show_userinfo $nfi
上面两个程序的执行结果是一样的,但是要注意着两种函数的不同调用方式,以及其返回给主调程序的到底是什么。明白了这一点,才能准确知道到底使用何种方式接收返回值!
SHELL函数处理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。