Bash

使用 shell 測試來驗證基本文件資訊。

  • July 5, 2018

我正在嘗試編寫一個 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 ' '從不存在的權限中刪除可能存在的任何額外空格。

引用自:https://unix.stackexchange.com/questions/453725