linux bash if后面跟一个函数

yitian20000 2010-11-16 09:52:20
脚本代码为:

#!/bin/bash

tu()
{
if (($1 == $2));then
return 1
fi

return 0
}

if tu 2 5
then
echo "return 1"
else
echo "return 0"
fi
exit 0

############
为什么它的执行结果是 : return 1?
2 小于 5,返回值是0,应该执行下面的else语句,输出 return 0,但是执行结果却是输出 return 1!!
为什么?
...全文
356 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
iisbsd 2010-11-16
  • 打赏
  • 举报
回复
Unix下执行正确返回0,异常返回非零,if判断执行是否正常,你再看一下逻辑。

$ if [ -d /tmpaaa ] ; then echo good - $?; else echo bad - $?; fi
bad - 1
$ if [ -d /tmp ] ; then echo good - $?; else echo bad - $?; fi
good - 0
freetstar 2010-11-16
  • 打赏
  • 举报
回复
这里的if判断的不是返回值,而是调用是否成功,这点是和c语言不一样的
freetstar 2010-11-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yitian20000 的回复:]

我现在不是要问if语句的写法,而是我想知道,我那个脚本的执行结果为什么是那样的。
脚本能正确执行,说明程序写的没错。我想探讨一下if语句的多种写法,这也是一个知识点,
if语句不是非要加“[]”不可的。
[/Quote]
主席没有跟你争[ ]
是你自己说了半天
freetstar 2010-11-16
  • 打赏
  • 举报
回复
lz说的对。这不是平常lz理解的c语言。。

你的shell脚本中if 语句看的是条件判断完是否正确,正确即是1,不正确即是0
yitian20000 2010-11-16
  • 打赏
  • 举报
回复
而且,一个函数被正确执行,$?的值是0,if语句更应该输出return 0才对啊。
我感觉它似乎是把0当作真,其他值当作假!
不知道要为什么要这样判断。
yitian20000 2010-11-16
  • 打赏
  • 举报
回复
可是换成 tu 5 5的话,就会输出 return 0。
应该不是按函数的执行状态来判断的。
steptodream 2010-11-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yitian20000 的回复:]

if语句并不是一定要加“[]”,好吧,我那样就是合法的语法。
[/Quote]
我没说 一定要加[ ] 好吧?

tu 2 5 调用函数 return的值就会是其返回状态
因此调用完函数 直接判断$?即可

if tu 2 5 这个可不是你认为在别的语言里的那样 会以函数的返回值来判断! 而是只要tu 2 5调用成功不出错 if就会成立!

另外按你的想法 你直接写个如下的简单脚本 你执行一下 看看是不是你想象的那样?!
if 1
then
echo "hello"
fi
yitian20000 2010-11-16
  • 打赏
  • 举报
回复
我现在不是要问if语句的写法,而是我想知道,我那个脚本的执行结果为什么是那样的。
脚本能正确执行,说明程序写的没错。我想探讨一下if语句的多种写法,这也是一个知识点,
if语句不是非要加“[]”不可的。
yitian20000 2010-11-16
  • 打赏
  • 举报
回复
if语句并不是一定要加“[]”,好吧,我那样就是合法的语法。
steptodream 2010-11-16
  • 打赏
  • 举报
回复
#!/bin/bash

tu()
{
if (($1 == $2));then
return 1
fi

return 0
}

tu 2 5
if [ $? -eq 1 ]

then
echo "return 1"
else
echo "return 0"
fi
exit 0

不要把你别的语言的习惯搬到shell脚本里来

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧