免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6596 | 回复: 14
打印 上一主题 下一主题

[其他] 如何获取调用函数的返回值 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-12-17 16:56 |只看该作者 |倒序浏览
有个已经写好的SCRIPT,执行是带参数的, 如 ./a.sh 2013,我想在脚本a里调用这个脚本b,如果脚本b执行成工没有错误返回0,有错无返回1,怎么写呢?
类似
if ./a.sh 2013 then
return 0
else
return 1
fi
前提是不修改a.sh

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
2 [报告]
发表于 2013-12-17 18:38 |只看该作者
  1. ./a.sh 2013
  2. if [ "$?" -eq 0 ];
  3. then
  4.     exit 0
  5. else
  6.     exit 1
  7. fi
复制代码

论坛徽章:
0
3 [报告]
发表于 2013-12-18 13:23 |只看该作者
回复 2# 井蛙夏虫


$? 不是返回上一个命令的返回值吗? 如果我调用的是脚本,脚本有N条语句,如果其中有一个命令出错了, 还能获得正确的值吗?

论坛徽章:
0
4 [报告]
发表于 2013-12-18 15:29 |只看该作者
回复 3# winsonjie


    脚本最终的返回结果跟“最后一条指令”执行的结果相同

论坛徽章:
0
5 [报告]
发表于 2013-12-19 00:40 |只看该作者
回复 4# thinalai


    那如果脚本里面写的是备份数据库,如果其中一个DB 备份失败了, 还会执行下一个DB的备份, 只要最后一个DB 备份成功,那$?就是0了, 我想要如果其中一个失败,也返回>1

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2013-12-19 09:24 |只看该作者
winsonjie 发表于 2013-12-19 00:40
回复 4# thinalai

那如果脚本里面写的是备份数据库,如果其中一个DB 备份失败了, 还会执行下一个DB的备份, 只要最后一个DB 备份成功,那$?就是0了, 我想要如果其中一个失败,也返回>1

这样的话,如果 a.sh 在出现失败的时候有输出,你可以自行捕获解析这些输出,并根据它们提供恰当的返回;如果连输出也没有,就只有修改 a.sh,要么让它提供输出,要么修改它的返回值。

论坛徽章:
0
7 [报告]
发表于 2013-12-22 14:38 |只看该作者
回复 5# winsonjie


    可以定义一个“全局变量”,在每次备份命令后面判断结果的值来改变它,最后再exit时调用这个变量。
    例如:
  1. E_CODE=0

  2. mysqldump .....
  3. [[ $? -ne 0 ]] && E_CODE=1


  4. exit $E_CODE
复制代码

论坛徽章:
0
8 [报告]
发表于 2013-12-23 17:18 |只看该作者
回复 7# thinalai


    最后再exit时调用这个变量? 那它不会只保存最后一次执行的值吗?

论坛徽章:
0
9 [报告]
发表于 2013-12-23 17:24 |只看该作者
回复 7# thinalai


    你能写一个完整的吗?谢谢

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
10 [报告]
发表于 2013-12-23 17:34 |只看该作者
回复 8# winsonjie

$ ls qq yy
ls: cannot access qq: No such file or directory
ls: cannot access yy: No such file or directory

$ cat error_code.sh
set -x   # for debug
RC=0
ls qq
RC=`expr $RC + $?`
ls yy
RC=`expr $RC + $?`

exit $RC

$ bash error_code.sh
+ RC=0
+ ls qq
ls: cannot access qq: No such file or directory
++ expr 0 + 2
+ RC=2
+ ls yy
ls: cannot access yy: No such file or directory
++ expr 2 + 2
+ RC=4
+ exit 4

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP