Chinaunix

标题: shell 脚本下0为真1为假吗? [打印本页]

作者: zhaoruisheng    时间: 2008-10-15 19:17
标题: shell 脚本下0为真1为假吗?
shell 脚本下0为真1为假吗?
let a=12
let b=12
test $a -eq $b
echo $?
最后输出为0,为什么?
作者: MMMIX    时间: 2008-10-15 19:42
标题: 回复 #1 zhaoruisheng 的帖子
这个你要看 test(1) 的文档
作者: zhaoruisheng    时间: 2008-10-15 20:10
test(1)的文档?那是什么东东呀?高手指点下阿
作者: MMMIX    时间: 2008-10-15 20:21
原帖由 zhaoruisheng 于 2008-10-15 20:10 发表
test(1)的文档?

please man 1 test
作者: zhaoruisheng    时间: 2008-10-15 20:43
谢谢了,马上去man
作者: zhaoruisheng    时间: 2008-10-15 20:52
man 只讲了test的用法,没说为什么为真时输出是0呀?这是怎么一回事呀?
作者: xiaocong004    时间: 2008-10-15 23:03
(转)
先谈$这个玩意,很有意思, 很多命令不带返回值
也就是说执行完了就完了,没有任何反馈,你也不知道执行对了还是错了
举个例子
test 2 -gt 1   (判断2是否大于一)
如果直接执行,无返回值
执行完之后,再执行
echo $?

看看,它就会说
0
0代表执行完毕,没有错误
不信你把这个表达式换成
test 2 -gt 3

echo $?
他就会显示
1
非零即是错误。

顺带看看test的其它比较用法
test int1 -eq int2 判断是否相等
test int1 -ne int2 判断是否不等
test int1 -lt int2 判断是否小于
test int1 -le int2 判断是否不小于
test int1 -gt int2 判断是否大于
test int1 -ge int2 判断是否不大于

test判断逻辑表达式
test 条件1 -a 条件2   条件一和2全部成立
test 条件1 -o 条件2   条件1或2成立一个即可
作者: MMMIX    时间: 2008-10-15 23:41
原帖由 zhaoruisheng 于 2008-10-15 20:52 发表
man 只讲了test的用法,没说为什么为真时输出是0呀?这是怎么一回事呀?

这是 Unix/Linux 下的约定,Shell 也是这么解释的。
作者: zhaoruisheng    时间: 2008-10-16 07:35
谢谢两位了,有些明白了。
作者: andrew913    时间: 2008-10-17 11:54
标题: 回复 #9 zhaoruisheng 的帖子
Linux 下的返回值都是成功为0,我以前学java 的时候,一般都不这样的。
作者: MMMIX    时间: 2008-10-17 14:10
原帖由 andrew913 于 2008-10-17 11:54 发表
Linux 下的返回值都是成功为0,我以前学java 的时候,一般都不这样的。

这只是 Linux 下程序的一种约定。另外,Linux 是一种 OS,Java 是一种编程语言,你要比较也应该是比较 Shell 脚本和 Java 语言,而不是 Linux 和 Java
作者: wolfme    时间: 2008-10-19 09:47
$?返回上一条命令的返回值,如果正确则都是返回0,错误的话,要看你的程序让其返回多少,例如,你的程序返回值为-1,则$?会返回255,是返回值里的低几位转换而来的。。。。
作者: pengiums    时间: 2008-10-27 16:57
标题: 回复 #1 zhaoruisheng 的帖子
0为真,非零为假。
作者: mainGalaxy    时间: 2008-10-27 18:02
标题: 回复 #1 zhaoruisheng 的帖子
不一定的,多尝试一下
作者: vanmelt    时间: 2008-10-27 22:28
是这样的 ,真时 为 0, 假的为非 0
作者: kkzhou    时间: 2008-10-28 14:25
原帖由 zhaoruisheng 于 2008-10-15 19:17 发表
shell 脚本下0为真1为假吗?
let a=12
let b=12
test $a -eq $b
echo $?
最后输出为0,为什么?


shell脚本下真假不是由整数决定的,
而必须进行了某个测试,例如-eq -d等;
也就是说一个表达式,无论是数字、字符串,test的结果都是true,例如
S=0
test $S
无论S取值什么都是true
但是如果 test $S -eq $S2,即用到了test所支持的表达式有了真假

最后,test也是一个程序,当他test的内容是true时它返回值是0,也就是你echo $?的结果
作者: love_aiqiu_123    时间: 2008-11-28 18:02
楼上太好了!!
作者: love_aiqiu_123    时间: 2008-11-28 18:03
---------------------------------------------------------------------------------
shell脚本下真假不是由整数决定的,
而必须进行了某个测试,例如-eq -d等;
也就是说一个表达式,无论是数字、字符串,test的结果都是true,例如
S=0
test $S
无论S取值什么都是true
但是如果 test $S -eq $S2,即用到了test所支持的表达式有了真假

最后,test也是一个程序,当他test的内容是true时它返回值是0,也就是你echo $?的结果
---------------------------------------------------------------------------------------------------

:em12: 学习了




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2