1. 程式人生 > >shell編程基礎:邏輯運算

shell編程基礎:邏輯運算

linux 邏輯運算 與或非 shell

最近在這裏繞了很久啊,現在勉強出來了,分享下自己的一點理解

退出狀態

一個程序一旦運行必然只有兩種結果,要麽成功要麽失敗,成功的結果都一樣,失敗的原因卻是各有不同(哢\~~\~,重來)。無論成功和失敗程序都是要退出的,成功的會向系統返回一個成功的信息,失敗的也會告訴系統自己執行失敗。這個成功或者失敗的狀態就是退出狀態。

退出狀態碼

程序在退出時向系統返回一個數字用來代表自己退出狀態,這個數字叫退出狀態碼。
退出狀態碼存放在‘ ? ‘變量中,可以使用echo $?查看
腳本中可以通過exit [n] 的方式來指定腳本退出時的狀態碼(註:exit會讓腳本立刻退出,此時退出狀態碼由exit指定。如果未指定exit最終狀態碼取決於最後一條命令)

條件測試

條件測試用來判斷某需求是否滿足。如兩個數字是否相等,兩個字符串是否相同……
條件測試的格式是這樣的:
test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]
條件測試依舊是返回一個值用來表示測試結果,

邏輯運算

與:有假必為假
或:有真必為真
非:真即是假假即是真

command1 && command2

邏輯與。當command1正確執行才執行command2,如果command1不正確執行,則不執行command2。在bash中,通過預定義變量“$?”來判斷命令是否正確執行,如果"$?"的值為0則表示前一條命令正確執行,其他任意值都表示不正確執行。

[root@lori ~]$·echo hello && ls hello
hello
ls: cannot access hello: No such file or directory
[root@lori ~]$·ls hello && echo hello
ls: cannot access hello: No such file or directory

為什麽,來看一下邏輯與,有假必為假,也就是當command1為假的時候此表達式command1&&command2已經確定結果為假,command2也就不必執行(因為此時無論command2真假表達式都為假)

command1 || command2

邏輯或,只有command1為假的時候才會執行command2

[root@lori ~]$·ls hello || echo hello
ls: cannot access hello: No such file or directory
hello
[root@lori ~]$·echo hello || ls hello
hello

依舊是上面的,邏輯或有真必為真,也就是當command1為真的時候此表達式command1 || command2已經為真command2便不必執行(已經不影響結果)

!!!!很重要!!!!
別太關註01,只關心真假
別太關註01,只關心真假
別太關註01,只關心真假

為什麽一直沒說返回值的問題,因為這是個坑,我在裏面差點出不來。先說我的結論:
命令的返回值(退出狀態碼,條件測試也是一種命令)代表的是程序的退出狀態,不是真假

好了,下面的內容特別繞。
一、真假對應1和0
二、命令執行成功為真,失敗為假
三、返回值對應0或者非0(條件測試只返回0和1)
四、返回值的0和非0對應的是程序的退出狀態,0表示執行成功,非0表示失敗
五、邏輯運算中,返回值用來判斷真假

如command1 || command2

command1執行→返回值
以上command1已經結束
查詢返回值→由返回值得出真假→開始邏輯運算

條件測試中由於返回值只有0和1更容易混淆,只要能接受條件測試是一種命令這種設定,理解起來應該會容易些吧。

command1&&command2||command3
把command3之前的內容看作一個命令就容易理解了

shell編程基礎:邏輯運算