shell_76.Linux使用 return 命令

本文介绍了Bashshell中return命令在函数中的使用,强调了其返回值的处理,包括正确读取返回值和理解退出状态码的范围。同时,展示了如何将函数输出保存到shell变量中以实现类似命令的效果。


使用 return 命令
bash shell 会使用 return 命令以特定的退出状态码退出函数。return 命令允许指定一个整数值作为函数的退出状态码,从而提供了一种简单的编程设定方式:

$ cat test5 
#!/bin/bash 
# using the return command in a function 
function dbl { 
 read -p "Enter a value: " value 
 echo "doubling the value" 
 return $[ $value * 2 ] 
} 
dbl 
echo "The new value is $?" 
$ 


注意
dbl 函数会将$value 变量中用户输入的整数值翻倍,然后用 return 命令返回结果。脚本用$?变量显示出该结果。
当用这种方法从函数中返回值时,一定要小心。为了避免出问题,牢记以下两个技巧。
函数执行一结束就立刻读取返回值。
退出状态码必须介于 0~255。

如果在用$?变量提取函数返回值之前执行了其他命令,那么函数的返回值会丢失。记住,
$?变量保存的是最后执行的那个命令的退出状态码。
第二个技巧界定了返回值的取值范围。由于退出状态码必须小于 256,因此函数结果也必须
为一个小于 256 的整数值。大于 255 的任何数值都会产生错误的值:

$ ./test5 
Enter a value: 200 
doubling the value 
The new value is 1 
$

使用函数输出
正如可以将命令的输出保存到 shell 变量中一样,也可以将函数的输出保存到 shell 变量中:

result=$(dbl) 


这个命令会将 dbl 函数的输出赋给$result 变量。来看一个例子:

$ cat test5b 
#!/bin/bash 
# using the echo to return a value 
function dbl { 
    read -p "Enter a value: " value 
    echo $[ $value * 2 ] 
} 
result=$(dbl) 
echo "The new value is $result" 
$ 
$ ./test5b 
Enter a value: 200 
The new value is 400 
$ 
$ ./test5b 
Enter a value: 1000 
The new value is 2000 
$ 


新函数会用 echo 语句来显示计算结果。该脚本会获取 dbl 函数的输出,而不是查看退出状态码。

#! /bin/sh mount -t proc proc /proc mount -t sysfs sysfs /sys mount -t tmpfs tmpfs /dev mount -t tmpfs -o nodev,size=100m none /tmp mount -t tmpfs -o nodev,size=100m,mode=755 none /var mknod -m 777 /dev/console c 5 1 mkdir -p /var/lock mdev -s echo /sbin/mdev > /proc/sys/kernel/hotplug insmod /lib/hisilicon/ko/hi_crg.ko insmod /lib/hisilicon/ko/ksecurec.ko insmod /lib/hisilicon/ko/hi_basic.ko insmod /lib/hisilicon/ko/hi_clk.ko insmod /lib/hisilicon/ko/hi_kreset.ko if [ -f /lib/hisilicon/ko/hi_sysctrl.ko ]; then insmod /lib/hisilicon/ko/hi_sysctrl.ko fi if [ -f /lib/hisilicon/ko/hi_acp.ko ]; then insmod /lib/hisilicon/ko/hi_acp.ko fi if [ -f /lib/hisilicon/ko/hi_wdg.ko ]; then insmod /lib/hisilicon/ko/hi_wdg.ko fi if [ -f /lib/modules/$(uname -r)/dw_wdt.ko ]; then insmod /lib/modules/$(uname -r)/dw_wdt.ko fi watchdog -T 30 -t 8 /dev/watchdog chip=`cat /sys/firmware/devicetree/base/compatible` chip=${chip#*,} [ -z $(echo $chip | grep ,) ] && chip=${chip#*-} if [ -f /etc/$chip ]; then exec /etc/$chip else exec /etc/chip fi 以上指令: insmod /lib/hisilicon/ko/hi_crg.ko insmod /lib/hisilicon/ko/ksecurec.ko insmod /lib/hisilicon/ko/hi_basic.ko insmod /lib/hisilicon/ko/hi_clk.ko insmod /lib/hisilicon/ko/hi_kreset.ko if [ -f /lib/hisilicon/ko/hi_sysctrl.ko ]; then insmod /lib/hisilicon/ko/hi_sysctrl.ko fi if [ -f /lib/hisilicon/ko/hi_acp.ko ]; then insmod /lib/hisilicon/ko/hi_acp.ko fi if [ -f /lib/hisilicon/ko/hi_wdg.ko ]; then insmod /lib/hisilicon/ko/hi_wdg.ko fi if [ -f /lib/modules/$(uname -r)/dw_wdt.ko ]; then insmod /lib/modules/$(uname -r)/dw_wdt.ko fi 是什么意思,解析
最新发布
09-05
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微辣已是极限

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值