bash的算術運算和條件測試語句

2021-09-20 20:35:36 字數 3945 閱讀 8928

shell指令碼程式設計:

利用bash指令碼程式設計實現算數運算:+—

*/% 模運算 取餘

**|^ 乘方

增強型算術運算符號:

+=  let b=b+1 ---> let b+=1

-=/=

*=%=

特殊的增強型算術運算:

b=b+1  b+=1  b++

算數運算方法:

1.let var=算數表示式

將算數表示式先行進行算數運算,並將運算得到的結果儲存到變數var中。

2.var=$[算術表示式]

算術表示式中如果有變數引用,可以使用$引用,也可以省略$

sum=$[c+b] 相當於 sum [$c+$b]

3.var=$((算術表示式))

算術表示式中如果有變數引用,可以使用$引用,也可以省略$

4.expr argu1 argu2 argu3

argu1和argu3必須是數值

argu2必須是運算符號

5.echo 「算數表示式」 | bc

注意:* 在某些情況下需要轉義。

變數:弱變數,弱型別的變數,字元型(預設)數值型(不包括浮點型)

條件測試命令:

test expression

shell的內建命令

[expression]

外部命令

`expression`

bash的內部關鍵字

注意:這類命令一般沒有執行結果,只有執行狀態返回值

test測試命令有三類測試表示式:

1.數值測試:雙目操作符

-eq:被測試的兩個數值是否相等,相等為真,不等為假

-ne:被測試的兩個數值是否不等,不等為真,相等為假

-gt:被測試的兩個數值左面的是否大於右面的,大於為真,小於為假

-lt:被測試的兩個數值左邊的是否小於右邊的,小於為真,大於為假

-ge:被測試的兩個數值左邊的是否大於等於右邊的,大於等於為真,小於為假

-le:被測試的兩個數值左邊的是否小於等於右邊的,小於等於為真,大於為假

例:test 整數1 –eq 整數2          整數相等

test 整數1 –ge 整數2          整數1大於等於整數2

test 整數1 –gt 整數2          整數1大於整數2

test 整數1 –le 整數2          整數1小於等於整數2

test 整數1 –lt 整數2          整數1小於整數2

test 整數1 –ne 整數2          整數1不等於整數2

2.字串測試

雙目操作符:

==|= :被測試的兩個字串是否相同,相同為真,不同為假。

!= :被測試的兩個字串是否不相同,不同為真,相同為假。

> :被測試的兩個字串在ascii碼表中對應的二進位制數值,左邊是否大於右邊,大於為真,小於為假。

< :被測試的兩個字串在ascii碼表中對應的二進位制數值,左邊是否小於右邊,小於為真,大於為假。

注意:大於號和小於號必須用在`expression`

=~ :被測試的兩個字串,左側的字串能否被右側的pattern匹配,能匹配為真,不能為假。

例:str1 = str2 檢查str1是否和str2相同 

str1 != str2 檢查str1是否和str2不同 

str1 > str2 檢查str1是否比str2大

str1 < str2 檢查str1是否比str2小 

str1 =~ str2 檢查str1是否能被str2的pattern匹配  

單目操作符:

-z "string" :判斷指定的字串是否為空串,空為真,不空為假。

-n "string" :判斷指定的字串是否為非空串,非空為真,空為假。

例:-z str1 檢查str1的長度是否為0 

-n str1 檢查str1的長度是否非0 

注意:1.通常情況下字串要加引號,單引號或雙引號都行,根據實際情況選擇即可。

2.和在某些情況下,可能意義不同,區分使用。

3.表示式的兩端以及操作符的兩端都要有空格

3.檔案狀態測試

單目測試:

檔案的存在性測試:如果被測試的檔案存在則為真,不存在則為假。

-a|-e

[-e /backup]

檔案型別測試(先測試存在性):

-b file:被測試的檔案是否存在並且是否為塊裝置,存在且為塊裝置為真,否則為假。

-c file:被測試的檔案是否存在並且是否為字元裝置……

-d file:被測試的檔案是否存在並且是否為目錄檔案……

-f file:被測試的檔案是否存在並且是否為普通檔案……

-h|-l file:被測試的檔案是否存在並且是否為符號鏈結檔案……

-p file:被測試的檔案是否存在並且是否為管道檔案……

-s file:被測試的檔案是否存在並且是否套接字檔案……

檔案的訪問許可權測試:

-r file:被測試的檔案是否存在並且當前有效使用者是否可讀,檔案存在並且當前有效使用者可讀為真,否則為假

-w file:被測試的檔案是否存在並且當前有效使用者是否可寫……

-x file:被測試的檔案是否存在並且當前有效使用者是否可執行……

例:對於目錄/tmp/testdir1,如果當前有效使用者有讀、寫和執行的許可權,那麼就在該目錄中建立乙個檔案;否則,顯示「沒有許可權不能建立檔案」的資訊。

test -r /tmp/testdir1 -a -w /tmp/testdir1 -a -x /tmp/testdir1 && touch filename /tmp/testdir1 || echo

檔案的特殊許可權標識測試:

-u file:被測試的檔案是否存在並且是否設定了suid許可權,檔案存在並且設定了suid許可權為真,否則為假。

-g file:被測試的檔案是否存在並且是否設定了guid許可權,……

-k file:被測試的檔案是否存在並且是否設定了sticky許可權,……

檔案的所有權測試:

-o file:被測試的檔案是否存在並且其屬主是否為當前有效使用者

-g file:被測試的檔案是否存在並且其屬組是否為當前有效使用者的組

檔案內容是否為空:

-s file:被測試的檔案是否存在並且內容不為空,存在且內容不為空為真,否則為假。

時間戳測試:

-n file:被測試的檔案從上一次被修改後,是否被修改過。

雙目測試:

file1 -ef file2:被測試的兩個檔案是否指向同乙個檔案系統的相同inode的用硬連線

file1 -nt file2:被測試的兩個檔案,file1是否比file2更新

file1 -ot file2:被測試的兩個檔案,file1是否比file2更舊

注意:在使用"["簡寫test時,左中括號後面的空格和右括號前面的空格是必需的,如果沒有

空格,shell不可能辨別表示式何時開始何時結束.

也就是說test option file可以全部改寫成:[ option file ]

例如:test –w file

改寫成    

[ –w file ]    

測試語句中可以新增邏輯運算:

第一種表達方式:

[ -o/tmp/test ]&&[ -s/tmp/test ]

[ -o/tmp/test ]||[ -s/tmp/test ]

![ -o/tmp/test ]

第二種表達方式:

[ -o/tmp/test -a -s /tmp/test ]

[ -o/tmp/test -o -s /tmp/test ]

[ !-o/tmp/test ]

命令的執行結果:

exit[#]

退出當前shell的登入

當shell指令碼執行時,一旦遇到exit命令,將立即結束當前shell程序,同時指令碼執行也將被停止,即exit後面的所有命令不再執行

bash指令碼程式設計的條件測試

如何編寫測試表示式來實現所需的測試 1 執行命令,並利用命令狀態返回值來判斷 0 成功 1 255 失敗 2 測試表示式 test expression expression expression expression兩端必須有空格 bash的測試型別 數值測試 eq 是否等於 ne 是否不等於 g...

bash的測試和比較

比較字串 string1 string2 等價於 string1 string2 比較整數 num1 eq num2 等價於 num1 num2 變數值不為空,且變數值中不包含空格的情況下,變數可不加雙引號,當然加了雙引號也可以 變數值為空或變數值中包含空格的情況下,變數一定要加雙引號 或變數沒有申...

資料傳送 定址和算術運算的總結

mov指令是一條資料傳送指令,它把源運算元複製到目的運算元中。movzx指令將較小的運算元複製到較大的運算元中並進行零擴充套件。movsx指令將較小的運算元複製到較大的運算元中並進行符號擴充套件。xchg指令交換兩個運算元的內容,指令中至少要有乙個運算元是暫存器。運算元型別 2 直接偏移運算元 在變...