一、條件測試
測試語句
在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 檔名 判斷是否為塊裝置...