shell 函数返回值接收问题
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 函数返回值接收问题相关推荐
- Shell:函数返回值接收
函数返回值接收处理 目录 函数返回值接收处理 第一种方式:echo ${var} 第二种方式:return ${var} 第一种方式:echo ${var} 在函数fun()内部使用echo + 结果 ...
- Shell函数返回值、删除函数、在终端调用函数
Shell 也支持函数.Shell 函数必须先定义后使用. Shell 函数的定义格式如下: function_name () {list of commands[ return value ] } ...
- Shell函数:Shell函数返回值、删除函数、在终端调用函数
函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高.像其他编程语言一样,Shell 也支持函数.Shell 函数必须先定义后使用. Shell 函数的定义格式如下: f ...
- 14.3 shell函数返回值
3. shell函数返回值 3.1 获取上一个命令的退出状态$? 3.2 获取函数的返回值$? 3.3 函数的返回值接收调用方式 3.1 获取上一个命令的退出状态$? $? 是一个特殊变量,用来获取上 ...
- shell 函数返回值
Shell函数返回值,常用的两种方式:return,echo. 1.return 语句 该返回方法有数值的大小限制,超过255,就会从0开始计算,所以如果返回超过255,就不能用这种方式,建议采用ec ...
- Linux Shell 函数返回值
Shell函数返回值,常用的两种方式:return,echo 1) return 语句shell函数的返回值,可以和其他语言的返回值一样,通过return语句返回. 示例: #!/bin/sh fun ...
- Linux Shell函数返回值
2019独角兽企业重金招聘Python工程师标准>>> 1) return 语句 shell函数的返回值,可以和其他语言的返回值一样,通过return语句返回. 示例: [javas ...
- linux shell函数返回值问题
在linux shell脚本中使用函数时,需要注意函数返回后,返回值的使用,不然很容易出问题.具体来说,shell脚本函数通过return返回后,返回值会保存在$?中.需要注意的是,$?会在函数返回后 ...
- Shell函数(函数定义、函数变量、函数调用、函数传参、函数返回值、获取函数返回值)
分享知识 传递快乐 1.函数定义 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.Shell 函数定义的语法格式如下: [function] funname [()]{函 ...
最新文章
- java stream 转 file_java 中 byte[]、File、InputStream 互相转换
- Oracle-11g安装与使用
- UICollectionView(一)基本概念
- BUUCTF-Reverse:reverse1
- ASP.NET Core2.0 环境下MVC模式的支付宝PC网站支付接口-沙箱环境开发测试
- 玩转oracle 11g(15):命令学习3
- oracle选择外键列,Oracle外键列上是否需要索引?
- 一文彻底搞懂Java中的值传递和引用传递!
- 利用这些心理学效应,轻松拿到满意offer
- 李明顺专栏周5月12日:给门户支招
- Android 车联网天气
- 函数用法r语言_R语言中的apply函数族
- 谷歌火狐等浏览器Flash安装失败,安装后进入网站仍提示未安装Flash
- 【业务架构】价值链分析:提高客户价值和盈利能力
- 性能测试监控TP50、TP99、TP999含义
- pytthon问题 pytcharm Automatic upload failed: could not resolve file “sftp://10.xx.xx.xx 【已解决】
- 大型医院PACS系统源码
- windows输入法输入英文字母中间有空格
- 【011】基于51单片机的低频信号发生proteus仿真与实物设计
- 什么是Java SE、Java EE、Java ME?