基本ファイル情報の確認方法 [重複]

基本ファイル情報の確認方法 [重複]

ファイルまたはディレクトリ名を引数として使用し、そのファイルがディレクトリであるのか、通常のファイルであるのか、それとも別のものかを報告するBashスクリプトを作成しようとしています。また、スクリプトは、ユーザーがファイルまたはディレクトリに対する読み取り、書き込み、および実行権限を持っているかどうかを報告する必要があります。

明らかに、次の内容が元のメッセージを受け取ります。

#!/bin/sh
read -p "Enter a filename: " fname
file $fname
ls -la $fname

しかし、fileコマンドを完全に削除し、filename変数をlsに渡して、結果に応じてif、then、elseステートメントの種類を作成できるかどうか疑問に思います。 lsコマンドはファイルタイプの完全な分析とコマンドを実行するユーザーがファイルに対する権限を提供するため、lsコマンドの結果に応じて出力をカスタマイズできますか?

答え1

シェルテストを使用してファイルの種類と権限を確認できます。

#!/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 ' '

シェルテスト


-fif構造は、ファイルタイプが通常のファイル()かディレクトリ()であるかを確認してファイルタイプを報告し-d、そうでない場合は両方を報告しません。

-r次に、読み取り()、書き込み(-w)、実行(-x)など、さまざまな権限を確認します。それぞれに変数を設定します。ユーザーがこれらの権限の1つを持っていない場合、その変数は設定されていないままになり、ユーザーがその権限を持っていない場合は、最後のエコー行で変数が空の状態に拡張されます。tr -s ' 'これは、存在しない権限に存在する可能性がある追加のスペース削除を呼び出すことによって最終的に行われます。

関連情報