shell 條件表示式test

2022-09-23 19:06:14 字數 4574 閱讀 7707

一、條件測試

測試語句

在bash的各種流程控制結構中通常要進行各種測試,然後根據測試結果執行不同的操作,

有時也會通過與if等條件語句相結合,讓我們可以方便的完成判斷。

格式1:test 測試表示式》

格式2:[條件表示式》]

格式3:[[條件表示式》]]

說明:格式1和格式2是等價的。

格式3為擴充套件的test命令,有網友推薦用格式3。

提示1、測試檔案是否存在

[root@node01 ~]# test -f file&& echo 1||echo 0

[root@node01 ~]# touch file

[root@node01 ~]# test -f file&& echo 1||echo 0

[root@node01 ~]# test ! -f file&& echo 1||echo 0 取反

字串判斷

[root@node01 ~]# arg=

[root@node01 ~]# test -n "$arg" &&echo 1||echo 0

[root@node01 ~]# test ! -n "$arg" &&echo 1||echo 0

[root@node01 ~]# test -z "$arg" &&echo 1||echo 0

[root@node01 ~]# test -z "$arg" &&echo true||echo false

true

2、中括號

[root@node01 ~]# [ -f file ]&& echo 1||echo 0

[root@node01 ~]# rm file

[root@node01 ~]# [ -f file ]&& echo 1||echo 0

[root@node01 ~]# [ ! -f file ]&& echo 1||echo 0

可以簡寫(不存在就不理他)

[root@node01 ~]# [ -f file ]||echo 0

[root@node01 ~]# [ -f file ]&& echo 1

雙中括號

[root@node01 day6]# [[ -f file ]]&& echo 1||echo 0

[root@node01 day6]# [[ -f file ]]&& echo 1||echo 0

[root@node01 day6]# [[ -f file && -d dir ]]&& echo 1||echo 0

[root@node01 day6]# [[ -f file || -d dir ]]&& echo 1||echo 0

[root@node01 day6]# mkdir dir

[root@node01 day6]# [[ -f file || -d dir ]]&& echo 1||echo 0

二、總結

以上3種格式引數用法一樣,只是語法會有區別,邏輯符等。

檔案測試操作符

-e 該「檔案」是否存在(常用)(exist)

-f 該「檔案」是否為檔案(file) (常用)

-s 檔案的大小是否為0

-d 該「檔案」是否為目錄(directory)

-b 該「檔案」是否為乙個快裝置(block)

-c 該「檔案」是否為乙個字元裝置(char)

-s 該「檔案」是否為乙個套接字檔案(socket)

-p 該「檔案」是否為乙個fifo(管道)檔案(pipe)

-l 該「檔案」是否為乙個連線檔案。(link)

檔案的「許可權」檢測,如 test -r filename

-r 檢測該檔案是否具有「可讀」屬性

-w 檢測該檔案是否具有「可寫」屬性

-x 檢測該檔案是否具有「可執行」屬性

-u 檢測該檔案是否具有「suid」屬性

-g 檢測該檔案是否具有「sgid」屬性

-k 檢測該檔案是否具有「sticky bit」屬性

-s 檢測該檔案是否為「非空白檔案」

比較兩個檔案,如: test file1 -nt file2

-nt 判斷file1是否比file2新(newer than)

-ot 判斷file1是否比file2舊(older than)

-ef 判斷file1與file2是否為同乙個檔案,可用於判斷硬鏈結。主要判斷兩個檔案是否均指向通過乙個inode。(equal file)

更多用法請檢視幫助(man test)

1、例項(針對於檔案)

[root@node01 day6]# mkdir wolf

[root@node01 day6]# [ -f wolf ]&& echo 1||echo 0

[root@node01 day6]# mkdir wolf1

[root@node01 day6]# [ -f wolf1 ]&& echo 1||echo 0

[root@node01 day6]# [ -e wolf1 ]&& echo 1||echo 0

[root@node01 day6]# [ -d wolf1 ]&& echo 1||echo 0

[root@node01 day6]# [ -d wolf ]&& echo 1||echo 0

r許可權root也有讀許可權,切換到普通使用者測試

[wolf@node01 day6]$ [[ -r wolf ]]&& echo 1||echo 0

[wolf@node01 day6]$ [[ -r wolf ]]&& echo 1||echo 0

[wolf@node01 day6]$ [ -w wolf ]&& echo 1||echo 0

[wolf@node01 day6]$ [ -w wolf ]&& echo 1||echo 0

[wolf@node01 day6]$ [ -w wolf ]&& echo 1||echo 0

[wolf@node01 day6]$ [ -w wolf ]&& echo 1||echo 0

[wolf@node01 day6]$ [ -r wolf ]&& echo 1||echo 0

[wolf@node01 day6]$ [ -x wolf ]&& echo 1||echo 0

[wolf@node01 day6]$ [ -w wolf ]&& echo 1||echo 0

[wolf@node01 day6]$ [ -w wolf ]&& echo 1||echo 0

[wolf@node01 day6]$ [ -x wolf ]&& echo 1||echo 0

[wolf@node01 day6]$ [ -w wolf ]&& echo 1||echo 0

[wolf@node01 day6]$ [ -w wolf ]&& echo 1||echo 0

2、字串測試

字串測試操作符的作用:比較兩個字串是否相同、字串長度是否為0,字串

是否為null(注:bash區分零長度字串和空字串)。

「=」比較兩個字串是否相同,與==等價,如if[ "$a" = "$b" ],其中$a這樣的變數

最好用「」括起來,因為如果中間有空格,*等符號就可能出錯,當然更好的方法就是

[ "$

[root@node01 day6]# echo $

[root@node01 day6]# [ -n "$f1" -a "$" = "$" ]&& echo 1||echo 0

[root@node01 day6]#

[root@node01 day6]# n1=12;n2=13

[root@node01 day6]# [[ $n1 -eq $n2 && -z "$1" ]]&& echo 1||echo 0

[root@node01 day6]# [[ ! $n1 -eq $n2 && ! -z "$n1" ]]&& echo 1||echo 0

學習可以多看系統指令碼/etc/init.d/

test條件表示式

[root@node01 day6]# test -f $f1&&echo 1||echo 0

[root@node01 day6]# test -f $f1&&echo 1||echo 0

[root@node01 day6]# test -n "$f1"&&echo 1||echo 0

[root@node01 day6]# test -z "$f1"&&echo 1||echo 0

[root@node01 day6]# test $n1 -eq $n2&&echo 1||echo 0

[root@node01 day6]# test $n1 -eq $n2 -a -z "$2" &&echo 1||echo 0

[root@node01 day6]# test a -ot b &&echo 1||echo 0

[root@node01 day6]# test a -nt b &&echo 1||echo 0

連線檔案

[root@node01 day6]# test a -ef b &&echo 1||echo 0

[root@node01 day6]# ln a c

[root@node01 day6]# test a -ef c &&echo 1||echo 0

shell中的條件表示式

by francis hao oct 1,2017 本文摘錄自bash的man手冊 條件表示式是由復合命令 或內建命令 test 和 使用的,用於測試檔案屬性和字串或數值比較。表示式形式如下表所示,如果其中的file形式為 dev fd n,那麼將測試檔案描述符n,如果file是 dev stdin...

shell 條件測試 test

shell環境根據命令執行後的返回狀態值 來判斷是否執行成功,當返回值為0時表示成功,否則 非0值 表示失敗或異常。使用專門的測試工具test命令,可對條件進行測試,並根據返回值來判斷條件是否成立 返回值為0表示成立 使用test測試命令時 使用格式 檔案測試 檔案測試指的是根據給定的路徑名稱,判斷...

shell條件測試test

shell條件測試可以通過以下兩種方式 test 引數 測試內容 引數 測試內容 一 測試檔案型別 test e 檔名 測試檔案是否存在 e 檔名 測試檔案是否存在,注意中括號兩邊的空格 test f 檔名 判斷是否為普通檔案 test d 檔名 判斷是否為目錄 test b 檔名 判斷是否為塊裝置...