1. 程式人生 > >使用Bash Shell檢查檔案是否存在的方法

使用Bash Shell檢查檔案是否存在的方法

前言

大家在工作的時候可能經常會遇到這樣的需求,在類Unix系統的Bash環境下,怎樣檢查檔案是否存在呢?既然有需求,當然就有解決的辦法了,Shell中的test命令,可以用來檢測檔案的型別或者比較數值是否相等,該命令也能用來檢查檔案是否存在。

可以用如下的命令來進行檢查:

test -e filename
[ -e filename ]
  
test -f filename
[ -f filename ]

下面的命令,則使用Shell的條件表示式,判斷/etc/hosts檔案是否存在:

[ -f /etc/hosts ] && echo "Found" || echo "Not found"

該組合命令會輸出以下內容:

Found

更常見的用法,則是將test命令放置在if..else..fi條件判斷的條件表示式,然後在其中寫上不同的分支邏輯

#!/bin/bash
file="/etc/hosts"
if [ -f "$file" ]
then
 echo "$file found."
else
 echo "$file not found."
fi

檢測檔案屬性的相關操作符

如果檔案存在,並且具有相應的屬性,如下的操作符都會返回true:

-b FILE
  FILE exists and is block special
-c FILE
  FILE exists and is character special
-d FILE
  FILE exists and is a directory
-e FILE
  FILE exists
-f FILE
  FILE exists and is a regular file
-g FILE
  FILE exists and is set-group-ID
-G FILE
  FILE exists and is owned by the effective group ID
-h FILE
  FILE exists and is a symbolic link (same as -L)
-k FILE
  FILE exists and has its sticky bit set
-L FILE
  FILE exists and is a symbolic link (same as -h)
-O FILE
  FILE exists and is owned by the effective user ID
-p FILE
  FILE exists and is a named pipe
-r FILE
  FILE exists and read permission is granted
-s FILE
  FILE exists and has a size greater than zero
-S FILE
  FILE exists and is a socket
-t FD file descriptor FD is opened on a terminal
-u FILE
  FILE exists and its set-user-ID bit is set
-w FILE
  FILE exists and write permission is granted
-x FILE
  FILE exists and execute (or search) permission is granted

以上命令,從man test複製而來。

使用上述符號的方法一模一樣:

if [ operator FileName ]
then
  echo "FileName - Found, take some action here"
else
 echo "FileName - Not found, take some action here"
fi

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可留言交流。

其他參考:

-e filename 如果 filename存在,則為真
-d filename 如果 filename為目錄,則為真 
-f filename 如果 filename為常規檔案,則為真
-L filename 如果 filename為符號連結,則為真
-r filename 如果 filename可讀,則為真 
-w filename 如果 filename可寫,則為真 
-x filename 如果 filename可執行,則為真
-s filename 如果檔案長度不為0,則為真
-h filename 如果檔案是軟連結,則為真
filename1 -nt filename2 如果 filename1比 filename2新,則為真。
filename1 -ot filename2 如果 filename1比 filename2舊,則為真。
-eq 等於
-ne 不等於
-gt 大於
-ge 大於等於
-lt 小於
-le 小於等於
至於!號那就是取非了唄!