&&与||的差别

return value概念:

在shell下跑的每一个command或function,在结束时都会传回父进程一个值,称为return value。

在shell command line中可用$?这个变量得到最“新“的一个return value,也就是刚结束的哪个进程的传回的值。

Return Value(RV)的取值为0-255之间,由进程(或script)的作者自行定义:

*若在xcript里,用exit RV來制定其值,若没指定,在结束时以最后一道命令之RV为值。

*若在function里,则用return RV來代替exit RV即可。


Return Value的作用是用来判断进程的退出状态(exit status),只有两种:

*0的话为“真“(true)

*非0的话为“假“(false)


注:每一个command在结束时都会送回return value 的!


test命令是用来测试某一个条件而送出return value以供true或false的判断

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 這份"文件"是否存在。

当expression测试为““时,test就送回0(true)的return value,否则送回非0(false)

若在 expression 之前加上一個 " ! "(感嘆號),則是當 expression 為"假時" 才送出 0 ,否則送出非 0 。
同時,test 也允許多重的覆合測試:
* expression1 -a expression2 :當兩個 exrepssion 都為 true ,才送出 0 ,否則送出非 0 。
* expression1 -o expression2 :只需其中一個 exrepssion 為 true ,就送出 0 ,只有兩者都為 false 才送出非 0 。


在command line中使用test时,不要忘记命令行的“重组“特性,

也就是碰到meta时会先处理meta再重新组建命令行。

比方说,若test碰到变量或命令替换时,若不能满足expression格式时,将会得到语法错误的结果。

舉例來說好了:
關於 [ string1 = string2 ] 這個 test 格式,
在 = 號兩邊必須要有字串,其中包括空(null)字串(可用 soft quote  或 hard quote 取得)。
假如 $A 目前沒有定義,或被定議為空字串的話,那如下的寫法將會失敗:

$ unset A
$ [ $A = abc ]
[: =: unary operator expected
這是因為命令行碰到  $ 這個 meta 時,會替換 $A 的值,然後再重組命令行,那就變成了:
[ = abc ]
如此一來 = 號左邊就沒有字串存在了,因此造成 test 的語法錯誤﹗
但是,下面這個寫法則是成立的:
$ [ "$A" = abc ]
$ echo $?
1

這是因為在命令行重組後的結果為:
[ "" = abc ]

由於 = 左邊我們用 soft quote 得到一個空字串,而讓 test 語法得以通過...

若對 test 還不是很有經驗的話,那在使用 test 時不妨先採用如下這一個"法則":

* 假如在 test 中碰到變量替換,用 soft quote 是最保險的﹗


&&与||都是用来“组建“多个command line用的:

* command1 && command2:其意思是command2 只有在RV为0(true)的条件下执行。

* command1 || command2:其意思是command2 只有在RV为非0(false)的条件下执行。

在同一命令行中,可用多个&&或||來组建。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值