Linux Shell程式設計 test命令

2022-07-31 19:54:18 字數 4140 閱讀 2272

test 命令是shell 指令碼中用來進行條件判斷的。

測試選項

作 用-b 檔案

判斷該檔案是否存在,並且是否為塊裝置檔案(是塊裝置檔案為真)

-c 檔案

判斷該檔案是否存在,並且是否為字元裝置檔案(是字元裝置檔案為真)

-d 檔案

判斷該檔案是否存在,並且是否為目錄檔案(是目錄檔案為真)

-e 檔案

判斷該檔案是否存在(存在為真)

-f 檔案

判斷該檔案是否存在,井且是否為普通檔案(是普通檔案為真)

-l 檔案

判斷該檔案是否存在,並且是否為符號鏈結檔案(是符號鏈結檔案為真〉

-p 檔案

判斷該檔案是否存在,並且是否為管道檔案(是管道檔案為真)

-s 檔案

判斷該檔案是否存在,並且是否為非空(非空為真)

-s 檔案

判斷該檔案是否存在,並且是否為套接字檔案(是套接字檔案為真〉

判斷目錄 /root/sh/ 是否存在,命令如下:

[root@localhost ~]# test -e /root/sh/or

[root@localhost ~]# [-e /root/sh/]

推薦使用""方式,在指令碼的條件語句中主要應用這種方式。兩條命令執行完後是沒有任何結果的。不過要注意,如果使用""方式,則在""的內部和資料之間必須使用空格;否則判斷式會報錯。可以通過"$?"預定義變數判斷這條命令的執行是否正確,如果變數值為 0,則代表 test 判斷為真;如果變數值非 0,則代表 test 判斷為假。例如:

[root@localhost ~]# [-e /root/sh/]

[root@localhost ~]# echo $?

0

判斷結果為0,/root/sh/目錄是存在的

[root@localhost ~]# [-e /root/test]

[root@localhost ~]# echo $?

1

在/root/下並沒有test檔案或目錄,所以"$?"的返回值為非0

也可以通過多命令順序執行符"&&"和"||" 判斷一下 /root/sh/ 是否是目錄,命令如下:

[root@localhost ~]# [-d /root/sh] && echo

"yes

"||echo"no

"yes

第一條判斷命令如果正確執行,則列印"yes"; 否則列印"no" 

測試選項

作 用-r 檔案

判斷該檔案是否存在,並且是否擁有讀許可權(有讀許可權為真)

-w 檔案

判斷該檔案是否存在,並且是否擁有寫許可權(有寫許可權為真)

-x 檔案

判斷該檔案是否存在,並且是否擁有執行許可權(有執行許可權為真)

-u 檔案

判斷該檔案是否存在,並且是否擁有suid許可權(有suid許可權為真)

-g 檔案

判斷該檔案是否存在,並且是否擁有sg1d許可權(有sgid許可權為真)

-k 檔案

判斷該檔案是否存在,並且是否擁有sbit許可權(有sbit許可權為真)

在使用 test 命令判斷許可權時,並不能區分所有者、屬組和其他人。只要檔案擁有許可權,test 判斷就為真,而不能區分哪個使用者身份擁有許可權。比如:

[root@localhost ~]# ll student.txt

-rw-r--r--. 1 root root 97 6月7 07:34

student.txt

[root@localhost ~]# [-w student.txt] && echo

"yes

"||echo"no

"yes

雖然 student.txt 檔案只有所有者擁有寫許可權,但在用 test 判斷時,是不能區分身份的,只要擁有寫許可權就返回真。

測試選項

作 用檔案 1 -nt檔案 2

判斷檔案1的修改時間是否比檔案2的新(如果新則為真)

檔案 1 *ot檔案 2

判斷檔案1的修改時間是否比檔案2的舊(如果舊則為真)

檔案 1 -ef 檔案 2

判斷檔案1是否和檔案2的inode號一致,可以理解為兩個檔案是否為同乙個檔案。這個 判斷用於判斷硬鏈結是很好的方法

[root@localhost ~]# ln /root/student.txt /tmp/stu.txt

#建立乙個硬鏈結

[root@localhost ~]# [/root/student.txt -ef/tmp/stu.txt] && echo

"yes

" || echo"no

"yes

測試選項

作 用整數1 -eq 整數 2

判斷整數 1 是否和整數 2 相等(相等為真)

整數1 -ne 整數 2

判斷整數 1 是否和整數 2 不相等(不相等為真)

整數1 -gt 整數 2

判斷整數 1 是否大於整數 2 (大於為真)

整數1 -lt 整數 2

判斷整數 1 是否小於整數 2(小於為真)

整數1 -ge 整數 2

判斷整數 1 是否大於等於整數 2 (大於等於為真)

整數1 -le 整數 2

判斷整數 1 是否小於等於整數 2(小於等於為真)

判斷23是否大於等於22

[root@localhost ~]# [23 -ge 22] && echo

"yes

"||echo"no

"yes

判斷23是否小於等於22

[root@localhost ~】# [23 -le 22] && echo

"yes

"||echo"no

"no

測試選項

作 用-z 字串

判斷字串是否為空(為空返回真)

-n 字串

判斷宇符串是否為非空(非空返回真)

字串 1 = 字串 2

判斷字串 1 是否和字串 2 相等(相等返回真)

字串 1 != 字串 2

判斷字串 1 是否和字串 2 不相等(不相等返回真)

給name變數賦值,判斷name變數是否為空

[root@localhost ~]# name=sc

[root@localhost ~]# [-z "

$name

"] && echo

"yes

" || echo"no

"no

判斷兩個字串相等,命令如下:

[root@localhost ~]# aa=11

[root@localhost ~]# bb=22

[root@localhost ~]#["

$aa"=="

bb"] && echo

"yes

" || echo"no

"no

測試選項

作 用判斷 1 -a 判斷 2

邏輯與,判斷 1 和判斷 2 都成立,最終的結果才為真

判斷 1 -o 判斷 2

邏輯或,判斷 1 和判斷 2 有乙個成立,最終的結果就為真

! 判斷

邏輯非,使原始的判斷式取反

判斷變數aa是否有值,同時判斷變數aa的值是否大於23

[root@localhost ~]# aa=11

[root@localhost ~]# [-n "

$aa" -a "

$aa" -gt 23] && echo

"yes

" || echo"no

"no

因為變數aa的值不大於23,所以雖然第乙個判斷值為真,但返回的結果是假

使用邏輯非,命令如下:

[root@localhost ~]# [! -n "

$aa"] && echo

"yes

" || echo"no

"no

"-n"選項是變數aa不為空,返回值就是真

加入"!"之後,判斷值就會取反,所以當變數aa有值時,返回值是假

注意,"!"和"-n"之間必須加入空格,否則會報錯。

linux shell 程式設計

bin bash comments your commands go here 首行中的符號 告訴系統其後路徑所指定的程式bash即是解釋此指令碼檔案的shell程式。除第一行外,以 開頭的行就是注釋行,直到此行的結束。如果一行未完成,可以在行尾加上 這個符號表明下一行與此行會合併為同一行。有環境變...

linux shell 程式設計

1 程式設計入門 shell的簡介。從程式設計師的角度來看,shell本身是一種用c語言編寫的程式,從使用者的角度來看,shell是使用者與linux作業系統溝通的橋梁。使用者既可以輸入命令執行,又可以利用 shell指令碼程式設計,完成更加複雜的操作。在linux gui日益完善的今天,在系統管理...

Linux Shell 程式設計

檔案描述 shell 代號 dev stdin 標準輸入,一般指的是鍵盤輸入 dev stdout 標準輸出,一般指終端顯示器 dev stderr 標準錯誤,一般指終端顯示器 l輸出重定向 l輸入重定向 l追加重定向 l錯誤重定向 2 l輸出和錯誤同時重定向 應用例子 1.將 ls的結果輸出到檔案...