免费注册 查看新帖 |

Chinaunix

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

请教SHELL编程中函数返回值的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-20 18:49 |只看该作者 |倒序浏览
fun1()
{
        return 0
}


if fun1
then
        echo "run ok"
fi



请问为什么上述脚本会打印出字符串?
按C语言的理解是函数返回0则if语句判断失败,不执行then后的语句,而我在Slackware 10.2系统下测试却打印出字符串.

是什么原因呢?谢谢.

论坛徽章:
0
2 [报告]
发表于 2007-03-20 19:14 |只看该作者
你知道c语言的main在最后一般都有return 0吧. 这意思就是程序执行正常. shell里面0就意思是真.

论坛徽章:
0
3 [报告]
发表于 2007-03-20 19:30 |只看该作者
谢谢,那是不是意思着if语句的判断表达为0则执行then后的语句,其它数值不执行.(正好与C语言的if语言判断条件相反?)

论坛徽章:
0
4 [报告]
发表于 2007-03-20 19:38 |只看该作者
原帖由 dragonyjd 于 2007-3-20 19:30 发表
谢谢,那是不是意思着if语句的判断表达为0则执行then后的语句,其它数值不执行.(正好与C语言的if语言判断条件相反?)


恩. 刚好反过来

论坛徽章:
0
5 [报告]
发表于 2007-03-20 19:39 |只看该作者
原帖由 dragonyjd 于 2007-3-20 19:30 发表
谢谢,那是不是意思着if语句的判断表达为0则执行then后的语句,其它数值不执行.(正好与C语言的if语言判断条件相反?)


问得好,不是。
只是指,当if或while后跟着cmd时,该cmd的返回值是0则为真,其他值则为假。

以我的理解,shell中被称为表达式的,是被[]、[[]]、(())括起来的内容。
  1. if [ 1 ]
  2. if [ 0 ]
复制代码

[]可以被解释为cmd,但此时[]的返回值恒为真,因为在这里[]是判断其中的字符串是否为空,1或0都被看作字符串,当然不是空,因此恒为真。

而if 1或while 1,会将1看成cmd,如果没有这个cmd,那么会报错。

[ 本帖最后由 一梦如是 于 2007-3-20 19:46 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2007-03-20 20:08 |只看该作者
非常感谢楼上二位.
这回明白了.
SHELL脚本还是有别于C语言的.还需特殊对待,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP