Linux中Shell邏輯運算子和運算式筆記

來源:互聯網
上載者:User

Shell 基本上是一個命令直譯器,類似於 DOS 下的 command。它接收使用者命令(如 ls 等),然後調用相應的應用程式。較為通用的 Shell 有標準的Bourne shell (sh)和C shell (csh)。
很多時候在寫 Shell 指令碼的時候都容易遺忘部分邏輯運算子和運算式的寫法,因此摘錄如下,留待不時之需查詢使用。
Shell 邏輯運算子涉及以下幾種類型,只要適當選擇,可以解決我們很多複雜的判斷,達到事半功倍效果。

一、邏輯判斷
1、關於檔案與目錄的邏輯判斷
-f 常用。判斷『檔案』是否為普通檔案,比如: if [ -f filename ]
-d 常用。判斷『目錄』是否存在
-b 判斷是否為一個『 block 檔案』
-c 判斷是否為一個『 character 檔案』
-S 判斷是否為一個『 socket 標籤檔案』
-L 判斷是否為一個『 symbolic link 的檔案』
-e 判斷『檔案』是否存在

2、關於程式的邏輯判斷
-G 判斷是否由 GID 所執行的程式所擁有
-O 判斷是否由 UID 所執行的程式所擁有
-p 判斷是否為程式間傳送資訊的 name pipe 或是 FIFO

3、關於檔案的屬性判斷
-r 判斷是否為可讀的屬性
-w 判斷是否為可以寫入的屬性
-x 判斷是否為可執行檔屬性
-s 判斷是否為『非空白檔案』
-u 判斷是否具有『 SUID 』的屬性
-g 判斷是否具有『 SGID 』的屬性
-k 判斷是否具有『 sticky bit 』的屬性

4、兩個檔案之間的判斷與比較
-nt 第一個檔案比第二個檔案新
-ot 第一個檔案比第二個檔案舊
-ef 第一個檔案與第二個檔案為同一個檔案( link 之類的檔案)

5. 布林運算子
&& 邏輯與
|| 邏輯或
! 邏輯非

二、運算子號
= 等於   應用於:整型或字串比較 如果在[] 中,只能是字串
!= 不等於 應用於:整型或字串比較 如果在[] 中,只能是字串
< 小於   應用於:整型比較 在[] 中,不能使用表示字串
> 大於   應用於:整型比較 在[] 中,不能使用表示字串
-eq 等於   應用於:整型比較
-ne 不等於 應用於:整型比較
-lt 小於   應用於:整型比較
-gt 大於   應用於:整型比較
-le 小於或等於 應用於:整型比較
-ge 大於或等於 應用於:整型比較
-a 雙方都成立(and) 相當於 &&
-o 單方成立(or) 相當於 ||
-z Null 字元串
-n 非Null 字元串

三、邏輯運算式
注意:所有字元與邏輯運算子直接用“空格”分開,不能連到一起。
1、test 命令
使用方法:test EXPRESSION

如:

 代碼如下 複製代碼
[root@localhost ~]# test 1 = 1 && echo 'ok'
ok
[root@localhost ~]# test -d /etc/ && echo 'ok'
ok
[root@localhost ~]# test 1 -eq 1 && echo 'ok'
ok
[root@localhost ~]# if test 1 = 1 ; then echo 'ok'; fi
ok

2、精簡運算式
[] 運算式

 代碼如下 複製代碼

[root@localhost ~]# [ 1 -eq 1 ] && echo 'ok'
ok
[root@localhost ~]# [ 2 < 1 ] && echo 'ok'
-bash: 1: No such file or directory
[root@localhost ~]# [ 2 < 1 ] && echo 'ok'

[root@localhost ~]# [ 2 -gt 1 -a 3 -lt 4 ] && echo 'ok'
ok
[root@localhost ~]# [ 2 -gt 1 && 3 -lt 4 ] && echo 'ok'

-bash: [: missing `]'注意:在[] 運算式中,常見的>,<需要加逸出字元,表示字串大小比較,以acill碼位置作為比較。不直接支援<>運算子,還有邏輯運算子 || 和 && 它需要用-a[and] –o[or]表示。

[[]] 運算式

 代碼如下 複製代碼
[root@localhost ~]# [ 1 -eq 1 ] && echo 'ok'
ok
[root@localhost ~]# [[ 2 < 3 ]] && echo 'ok'
ok
[root@localhost ~]# [[ 2 < 3 && 4 < 5 ]] && echo 'ok'

ok注意:[[]] 運算子只是[]運算子的擴充。能夠支援<,>符號運算不需要轉義符,它還是以字串比較大小。裡面支援邏輯運算子 || 和 &&

bash 的條件運算式中有三個幾乎等效的符號和命令:test,[]和[[]]。通常,大家習慣用if [];then這樣的形式。而[[]]的出現,根據ABS所說,是為了相容><之類的運算子。
不考慮對低版本bash和對sh的相容的情況下,用[[]]是相容性強,而且效能比較快,在做條件運算時候,可以使用該運算子。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.