首页 > 代码库 > shell学习之&& 与 || 差在哪?

shell学习之&& 与 || 差在哪?

在解答本章题目之前,先让我们了解一个概念:return value !
我们在 shell 下跑的每一个 command 或 function ,在结束的时候都会传回父行程一个值,
称为 return value 。
在 shell command line 中可用 $? 这个变量得到最"新"的一个 return value ,也就是刚结
束的那个行程传回的值。
Return Value(RV) 的取值为 0-255 之间,由程序(或 script)的作者自行定议:
* 若在 script 里,用 exit RV 来指定其值,若没指定,在结束时以最后一道命令之 RV 为值。
* 若在 function 里,则用 return RV 来代替 exit RV 即可。
Return Value 的作用,是用来判断行程的退出状态(exit status),只有两种:
* 0 的话为"真"( true )
* 非 0 的话为"假"( false )
举个例子来说明好了:
假设当前目录内有一份 my.file 的文件,而 no.file 是不存在的:
代码:$ touch my.file
$ ls my.file
$ echo $?
# first echo
0
$ ls no.file
ls: no.file: No such file or directory
$ echo $?
# second echo
1
$ echo $?
# third echo
0
上例的第一个 echo 是关于 ls my.file 的 RV ,可得到 0 的值,因此为 true ;
第二个 echo 是关于 ls no.file 的 RV ,则得到非 0 的值,因此为 false ;

第三个 echo 是关于第二个 echo $? 的 RV ,为 0 的值,因此也为 true 。


然而,有一个命令却是"专门"用来测试某一条件而送出 return value 以供 true 或 false 的
判断,
它就是 test 命令了!
若你用的是 bash ,请在 command line 下打 man test 或 man bash 来了解这个 test
的用法。
这是你可用作参考的最精确的文件了,要是听别人说的,仅作参考就好...
下面我只简单作一些辅助说明,其余的一律以 man 为准:
首先,test 的表示式我们称为 expression ,其命令格式有两种:
代码:
test expression
or:
[ expression ]
(请务必注意 [ ] 之间的空格键!)
用哪一种格式没所谓,都是一样的效果。(我个人比较喜欢后者...)


其次,bash 的 test 目前支持的测试对像只有三种:
* string:字符串,也就是纯文字。
* integer:整数( 0 或正整数,不含负数或小数点)。
* file:文件。
请初学者一定要搞清楚这三者的差异,因为 test 所用的 expression 是不一样的。
以 A=123 这个变量为例:
* [ "$A" = 123 ]:是字符串的测试,以测试 $A 是否为 1、2、3 这三个连续的"文字"。
* [ "$A" -eq 123 ]:是整数的测试,以测试 $A 是否等于"一百二十三"。
* [ -e "$A" ]:是关于文件的测试,以测试 123 这份"文件"是否存在。


* 假如在 test 中碰到变量替换,用 soft quote 是最保险的!

shell学习之&& 与 || 差在哪?