玩轉Bash指令碼:test測試語句,bashtest

來源:互聯網
上載者:User

玩轉Bash指令碼:test測試語句,bashtest

總第1篇

test

test就是測試的意思,常用在流程式控制制語句中作為條件。下面做一下介紹。

測試整數


整數的test就是大小關係的比較,與其他語言不同,Bash中沒有使用<,>來做大於等於符號,而是使用了減號開頭的選項來比較。

假如有兩個整數變數a和b。那麼比較a是否大於b,就寫作 test $a -gt $b ,符合條件返回真值1。實際在終端裡測試的時候可以這樣寫來看test語句的執行結果

test $a -gt $ $b && echo “Yes”
如果條件成立列印 Yes,不成立不列印。

全部的關係比較選項為:

選項 描述 英文全稱
eq 等於 equal
gt 大於 greater than
lt 小於 less than
ne 不等於 not equal
ge 大於等於 greater or equal
le 小於等於 less or equal
Bash指令碼,或者說Shell終端中的各種命令都有很豐富的選項,所以我建議在記憶的時候要去記憶它的英文全稱,理解了它的含義,這樣反而會降低記憶的難度。

測試字串

字串的測試無非就是包括,判斷兩個字串是否相等,判斷一個字串是否為空白。

假設str1和str2是持有兩個字串的變數(直接測試兩個字串,而非字串變數時,則不加$,這很好理解)。具體用法為:

用法 描述
test $str1 = $str2 測試是否相等,相等返回1
test $str1 != $str2 測試是否不等,不等返回1
test $str1 \< $str2 如果str1的字典序在str2之後,則返回1
test $str1 \> $str2 如果str1的字典序在str2之前,則返回1
test $str1 如果不為空白返回1
test -n $str1 如果不為空白返回1
test -z $str1 如果是空串,返回1

關於字典序的那兩個比較,其實就是大於符號 > 和小於符號 <。因為bash中這兩個符號有重新導向的意思,所以這裡要使用反斜線\ 轉義。

選項-n是 nonzero 的縮寫。選項-z是 zero 的縮寫。這樣好記憶了吧

測試檔案

測試檔案需要用到大量的選項,這裡我唯寫一個常用的,其他的大家自行 man test 

針對單個檔案

選項 描述
d 是否為目錄
f 是否為普通檔案
x 是否有執行許可權
r 是否有讀許可權
w 是否寫讀許可權
e 是否存在
s 檔案大小是否大於0
c 是否為字元裝置檔案
b 是否為塊裝置檔案
以上條件在成立的時候返回真值1。具體用法比如:

test -f hello.ctest -d /home...

針對兩個檔案

用法 描述
test file1 -nt file2 測試file1的修改時間是不是比file2 new(晚)
test file1 -ot file2 測試file1的修改時間是不是比file2 old(早)
test file1 -ef file2

測試兩者是相同的裝置和具有相同的結點(inode)數

同樣的,若是條件成立則返回真值1。注意這裡的file1,file2就是檔案名稱的字串了。

#可以直接test a.c -nt b.c#或者是a=a.cb=b.ctest $a -nt $b
不再細表。

邏輯運算

邏輯運算就是與或非。

  • -a  邏輯與
  • -o  邏輯或
  • !     邏輯非

用法如:

test $a -lt $b -a $a -gt $ctest $a -lt $b -o $a -gt $ctest ! -d sleep.sh && echo Yes #如果sleep.sh不是目錄,就列印Yes
其實完整版是這樣:

test $a -lt $b -a test $a -gt $ctest $a -lt $b -o test $a -gt $c 

簡化版test

在讀完這一部分後,你可能會驚呼,怎麼不早點告訴我。哈哈。

其實以上所有的test命令都可以用方括弧替換。比如

test -f hello.c

可以換成

[ -f hello.c ]

怎麼樣,很方便吧。注意的是,方括弧和運算式前後各有一個空格間隔哦。不要丟掉。實際也就是 [空格-f hello.c空格]

其他注意的地方是方括弧的邏輯運算式,比如

test $a -lt $b -a $a -gt $c

可以轉化為

[ $a -lt $b -a $a -lt $c ]

或者分開作為兩條語句

[ $a -lt $b -a ]&&[ $a -lt $c ]

這個&&並無什麼特別之處,並非方括弧運算所專屬。此處就是當前面語句為真時,接著執行後面的語句。所有的Bash語句都可以用&&或||串連。


bash指令碼test測試整數與字串的問題

按字元順序判斷。
比如 sdfiwf1342 第一個字母s比 dfgsf23 第一個字母d大,所以sdfiwf1342大
 
bash shell 指令碼的if語句塊中怎更改if語句塊之外的變數值

if 條件陳述式中沒有"=="這樣的寫法,如果是數值應該這樣寫:
if [ $a -eq $b ] 注意空格
若$a,$b為字串,則應該這樣寫
if [ "$a" = "$b" ] 注意空格
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.