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

第一种方式,有点像C语言调用函数的风格,直接把函数的执行结果复制给变量!不过,这个赋值过程和C语言的函数赋值是不一样的!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
doread usernamem=`check_user $username`#使用变量接收函数check_user传递的值if [ -n "$m" ]thenuserinfo $mexitelseecho "$username is not exit!"fi
done

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

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" ]thenreturn 0elsereturn 1fi
}show_userinfo()
{userinfo=`head -$n /etc/passwd | tail -1 | cut -d ":" -f 1,3,4`echo $userinfo
}echo  "input username : "
read usernamecheck_user $username
num=$?if [ $num -eq 0 ]
thenecho "The user '$username' is not exist."exit
elseshow_userinfo $n
fi

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

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

越界问题

return返回数字有时候正确,有时候又不正确是为什么呢?

我们知道return原本就是用于返回执行状态的,比如0,1.那么我们在返回500的时候,实际上是数据溢出了。

根据测试,我们推断shell的内置return承接返回值用的是一个字节的大小,也就是8位,最多可以输出无符号0-255的整形,范围之外的数据全部溢出显示。因此在使用return的时候,务必留意数值大小。

shell 函数返回值接收问题相关推荐

  1. Shell:函数返回值接收

    函数返回值接收处理 目录 函数返回值接收处理 第一种方式:echo ${var} 第二种方式:return ${var} 第一种方式:echo ${var} 在函数fun()内部使用echo + 结果 ...

  2. Shell函数返回值、删除函数、在终端调用函数

    Shell 也支持函数.Shell 函数必须先定义后使用. Shell 函数的定义格式如下: function_name () {list of commands[ return value ] } ...

  3. Shell函数:Shell函数返回值、删除函数、在终端调用函数

    函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高.像其他编程语言一样,Shell 也支持函数.Shell 函数必须先定义后使用. Shell 函数的定义格式如下: f ...

  4. 14.3 shell函数返回值

    3. shell函数返回值 3.1 获取上一个命令的退出状态$? 3.2 获取函数的返回值$? 3.3 函数的返回值接收调用方式 3.1 获取上一个命令的退出状态$? $? 是一个特殊变量,用来获取上 ...

  5. shell 函数返回值

    Shell函数返回值,常用的两种方式:return,echo. 1.return 语句 该返回方法有数值的大小限制,超过255,就会从0开始计算,所以如果返回超过255,就不能用这种方式,建议采用ec ...

  6. Linux Shell 函数返回值

    Shell函数返回值,常用的两种方式:return,echo 1) return 语句shell函数的返回值,可以和其他语言的返回值一样,通过return语句返回. 示例: #!/bin/sh fun ...

  7. Linux Shell函数返回值

    2019独角兽企业重金招聘Python工程师标准>>> 1) return 语句 shell函数的返回值,可以和其他语言的返回值一样,通过return语句返回. 示例: [javas ...

  8. linux shell函数返回值问题

    在linux shell脚本中使用函数时,需要注意函数返回后,返回值的使用,不然很容易出问题.具体来说,shell脚本函数通过return返回后,返回值会保存在$?中.需要注意的是,$?会在函数返回后 ...

  9. Shell函数(函数定义、函数变量、函数调用、函数传参、函数返回值、获取函数返回值)

    分享知识 传递快乐 1.函数定义 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.Shell 函数定义的语法格式如下: [function] funname [()]{函 ...

最新文章

  1. java stream 转 file_java 中 byte[]、File、InputStream 互相转换
  2. Oracle-11g安装与使用
  3. UICollectionView(一)基本概念
  4. BUUCTF-Reverse:reverse1
  5. ASP.NET Core2.0 环境下MVC模式的支付宝PC网站支付接口-沙箱环境开发测试
  6. 玩转oracle 11g(15):命令学习3
  7. oracle选择外键列,Oracle外键列上是否需要索引?
  8. 一文彻底搞懂Java中的值传递和引用传递!
  9. 利用这些心理学效应,轻松拿到满意offer
  10. 李明顺专栏周5月12日:给门户支招
  11. Android 车联网天气
  12. 函数用法r语言_R语言中的apply函数族
  13. 谷歌火狐等浏览器Flash安装失败,安装后进入网站仍提示未安装Flash
  14. 【业务架构】价值链分析:提高客户价值和盈利能力
  15. 性能测试监控TP50、TP99、TP999含义
  16. pytthon问题 pytcharm Automatic upload failed: could not resolve file “sftp://10.xx.xx.xx 【已解决】
  17. 大型医院PACS系统源码
  18. windows输入法输入英文字母中间有空格
  19. 【011】基于51单片机的低频信号发生proteus仿真与实物设计
  20. 什么是Java SE、Java EE、Java ME?

热门文章

  1. echo -n 和echo -e 参数意义
  2. 单片机电子电路中常用的负压产生电路
  3. 区块链学习之密码学安全技术(五)
  4. Python应用与实践【转】
  5. 《中国人工智能学会通讯》——12.38 知识库与 HTML 表格的融合
  6. 6、Hive的特殊分隔符处理
  7. LIst和map的遍历
  8. AlertDialog 点击空白处、返回按钮 行为
  9. ubuntu12.04编译android4.0源代码Deug2
  10. SQL datediff (时间差)