自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

在Bash中使用[方括號(hào)](二)

系統(tǒng) Linux
我們繼續(xù)來(lái)看方括號(hào)的用法,它們甚至還可以在 Bash 當(dāng)中作為一個(gè)命令使用。在前一篇文章當(dāng)中,我們介紹了方括號(hào)在命令行中可以用于通配操作,如果你已經(jīng)讀過(guò)前一篇文章,就可以從這里繼續(xù)了。

[[263170]]

我們繼續(xù)來(lái)看方括號(hào)的用法,它們甚至還可以在 Bash 當(dāng)中作為一個(gè)命令使用。

歡迎回到我們的方括號(hào)專題。在前一篇文章當(dāng)中,我們介紹了方括號(hào)在命令行中可以用于通配操作,如果你已經(jīng)讀過(guò)前一篇文章,就可以從這里繼續(xù)了。

方括號(hào)還可以以一個(gè)命令的形式使用,就像這樣:

  1. [ "a" = "a" ]

上面這種 [ ... ] 的形式就可以看成是一個(gè)可執(zhí)行的命令。要注意,方括號(hào)內(nèi)部的內(nèi)容 "a" = "a" 和方括號(hào) [、] 之間是有空格隔開(kāi)的。因?yàn)檫@里的方括號(hào)被視作一個(gè)命令,因此要用空格將命令和它的參數(shù)隔開(kāi)。

上面這個(gè)命令的含義是“判斷字符串 "a" 和字符串 "a" 是否相同”,如果判斷結(jié)果為真,那么 [ ... ] 就會(huì)以狀態(tài)碼status code 0 退出,否則以狀態(tài)碼 1 退出。在之前的文章中,我們也有介紹過(guò)狀態(tài)碼的概念,可以通過(guò) $? 變量獲取到最近一個(gè)命令的狀態(tài)碼。

分別執(zhí)行

  1. [ "a" = "a" ]
  2. echo $?

以及

  1. [ "a" = "b" ]
  2. echo $?

這兩段命令中,前者會(huì)輸出 0(判斷結(jié)果為真),后者則會(huì)輸出 1(判斷結(jié)果為假)。在 Bash 當(dāng)中,如果一個(gè)命令的狀態(tài)碼是 0,表示這個(gè)命令正常執(zhí)行完成并退出,而且其中沒(méi)有出現(xiàn)錯(cuò)誤,對(duì)應(yīng)布爾值 true;如果在命令執(zhí)行過(guò)程中出現(xiàn)錯(cuò)誤,就會(huì)返回一個(gè)非零的狀態(tài)碼,對(duì)應(yīng)布爾值 false。而 [ ... ] 也同樣遵循這樣的規(guī)則。

因此,[ ... ] 很適合在 if ... then、whileuntil 這種在代碼塊結(jié)束前需要判斷是否達(dá)到某個(gè)條件結(jié)構(gòu)中使用。

對(duì)應(yīng)使用的邏輯判斷運(yùn)算符也相當(dāng)直觀:

  1. [ STRING1 = STRING2 ] => 檢查字符串是否相等
  2. [ STRING1 != STRING2 ] => 檢查字符串是否不相等
  3. [ INTEGER1 -eq INTEGER2 ] => 檢查整數(shù) INTEGER1 是否等于 INTEGER2
  4. [ INTEGER1 -ge INTEGER2 ] => 檢查整數(shù) INTEGER1 是否大于等于 INTEGER2
  5. [ INTEGER1 -gt INTEGER2 ] => 檢查整數(shù) INTEGER1 是否大于 INTEGER2
  6. [ INTEGER1 -le INTEGER2 ] => 檢查整數(shù) INTEGER1 是否小于等于 INTEGER2
  7. [ INTEGER1 -lt INTEGER2 ] => 檢查整數(shù) INTEGER1 是否小于 INTEGER2
  8. [ INTEGER1 -ne INTEGER2 ] => 檢查整數(shù) INTEGER1 是否不等于 INTEGER2
  9. 等等……

方括號(hào)的這種用法也可以很有 shell 風(fēng)格,例如通過(guò)帶上 -f 參數(shù)可以判斷某個(gè)文件是否存在:

  1. for i in {000..099}; \
  2. do \
  3. if [ -f file$i ]; \
  4. then \
  5. echo file$i exists; \
  6. else \
  7. touch file$i; \
  8. echo I made file$i; \
  9. fi; \
  10. done

如果你在上一篇文章使用到的測(cè)試目錄中運(yùn)行以上這串命令,其中的第 3 行會(huì)判斷那幾十個(gè)文件當(dāng)中的某個(gè)文件是否存在。如果文件存在,會(huì)輸出一條提示信息;如果文件不存在,就會(huì)把對(duì)應(yīng)的文件創(chuàng)建出來(lái)。最終,這個(gè)目錄中會(huì)完整存在從 file000file099 這一百個(gè)文件。

上面這段命令還可以寫(xiě)得更加簡(jiǎn)潔:

  1. for i in {000..099};\
  2. do\
  3. if [ ! -f file$i ];\
  4. then\
  5. touch file$i;\
  6. echo I made file$i;\
  7. fi;\
  8. done

其中 ! 運(yùn)算符表示將判斷結(jié)果取反,因此第 3 行的含義就是“如果文件 file$i 不存在”。

可以嘗試一下將測(cè)試目錄中那幾十個(gè)文件隨意刪除幾個(gè),然后運(yùn)行上面的命令,你就可以看到它是如何把被刪除的文件重新創(chuàng)建出來(lái)的。

除了 -f 之外,還有很多有用的參數(shù)。-d 參數(shù)可以判斷某個(gè)目錄是否存在,-h 參數(shù)可以判斷某個(gè)文件是不是一個(gè)符號(hào)鏈接??梢杂?-G 參數(shù)判斷某個(gè)文件是否屬于某個(gè)用戶組,用 -ot 參數(shù)判斷某個(gè)文件的***更新時(shí)間是否早于另一個(gè)文件,甚至還可以判斷某個(gè)文件是否為空文件。

運(yùn)行下面的幾條命令,可以向幾個(gè)文件中寫(xiě)入一些內(nèi)容:

  1. echo "Hello World" >> file023
  2. echo "This is a message" >> file065
  3. echo "To humanity" >> file010

然后運(yùn)行:

  1. for i in {000..099};\
  2. do\
  3. if [ ! -s file$i ];\
  4. then\
  5. rm file$i;\
  6. echo I removed file$i;\
  7. fi;\
  8. done

你就會(huì)發(fā)現(xiàn)所有空文件都被刪除了,只剩下少數(shù)幾個(gè)非空的文件。

如果你還想了解更多別的參數(shù),可以執(zhí)行 man test 來(lái)查看 test 命令的 man 手冊(cè)(test[ ... ] 的命令別名)。

有時(shí)候你還會(huì)看到 [[ ... ]] 這種雙方括號(hào)的形式,使用起來(lái)和單方括號(hào)差別不大。但雙方括號(hào)支持的比較運(yùn)算符更加豐富:例如可以使用 == 來(lái)判斷某個(gè)字符串是否符合某個(gè)模式pattern,也可以使用 <、> 來(lái)判斷兩個(gè)字符串的出現(xiàn)順序。

可以在 Bash 表達(dá)式文檔中了解到雙方括號(hào)支持的更多運(yùn)算符。

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2019-04-15 11:10:34

Bash方括號(hào)命令行

2023-01-13 12:37:43

Bashshell花括號(hào)

2020-10-13 19:04:58

Bash信號(hào)捕獲Shell腳本

2023-07-12 14:13:03

BashLinux

2022-12-14 10:08:00

BashLinux

2022-01-16 07:48:33

腳本Bash 工具

2023-07-20 15:37:50

Bash數(shù)組

2022-12-02 14:30:24

Bash腳本數(shù)組

2023-03-14 08:17:40

Bash編程語(yǔ)言

2020-04-09 10:18:51

Bash循環(huán)Linux

2020-02-05 14:17:48

Python數(shù)據(jù)結(jié)構(gòu)JavaScript

2020-02-05 16:37:06

方括號(hào)Python方法

2022-11-23 08:14:42

bash 腳本test 命令

2019-02-12 15:47:42

Bash尖括號(hào)命令

2019-03-18 15:53:11

BashLinux花括號(hào)

2018-12-14 10:00:16

BashLinux命令

2019-10-22 17:33:57

LinuxBash腳本

2009-06-25 16:49:24

Hibernate

2023-11-17 12:04:39

GORM并發(fā)

2013-12-13 17:21:14

Lua腳本語(yǔ)言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)