Bash
使用 shell 測試來驗證基本文件資訊。
我正在嘗試編寫一個 Bash 腳本,它將文件或目錄的名稱作為參數並報告該文件是目錄、正常文件還是其他文件。該腳本還應報告使用者是否對文件或目錄具有讀、寫和執行權限。
顯然這樣的事情會得到原始資訊:
#!/bin/sh read -p "Enter a filename: " fname file $fname ls -la $fname
但是,我想知道我們是否可以完全刪除文件命令,將文件名變數傳遞給 ls,然後我們根據結果編寫某種 if、then、else 語句。ls 命令給出了文件類型和執行它的使用者對文件的權限的完整分解,所以我可以根據 ls 命令的結果進行自定義輸出嗎?
相反,建議使用 shell 測試。下面的答案顯示瞭如何格式化的一個很好的例子。
您可以使用 shell 測試來檢查文件類型和權限:
#!/bin/sh read -rp 'Enter a filename: ' fname if [ -f "$fname" ]; then echo 'File is a regular file' elif [ -d "$fname" ]; then echo 'File is a directory' else echo 'File is not a regular file or a directory' fi [ -r "$fname" ] && read=read [ -w "$fname" ] && write=write [ -x "$fname" ] && execute=execute echo "User has ${read} ${write} ${execute} permissions" | tr -s ' '
if 構造將通過檢查文件類型是正常文件 (
-f
) 還是目錄 (-d
) 來報告文件類型,否則將報告兩者都不是。然後我們檢查各種權限:讀(
-r
)、寫(-w
)和執行(-x
)。為每個設置一個變數。如果使用者沒有這些權限之一,則相應的變數將保持未設置,因此在最後的回顯行中,如果使用者沒有該權限,則該變數將擴展為空。這是通過呼叫來結束的,以tr -s ' '
從不存在的權限中刪除可能存在的任何額外空格。