ディレクトリが空のときにエラーが検出されました。

ディレクトリが空のときにエラーが検出されました。

ディレクトリパスが与えられると、最小、最大、および平均ファイルサイズで少なくとも1つのファイルを印刷する必要がある./123.shというスクリプト名を作成する必要があります。例えば

$> ./123.sh /usr/share
Minimum file size: 1024
    /usr/share/lala.txt
    /usr/share/koko.txt
Maximum file size: 100234
    /usr/share/somewhere/else/test.tar.gz
Average file size: 5034

私のコード:

dir="$1"

if [ $# -ne 1 ]
then
    echo "please pass arguments" 
exit 0
fi


if [ -e $dir ]
then
printf "minimum file size: %s\n\t%s\n" \
 $(du $dir -hab | sort -n -r | tail )

printf "maximum file size: %s\n\t%s\n" \
 $(du $dir -ab | sort -n | tail -1)

printf "average file size: %s"
du $dir -sk | awk '{s+=$1}END{print s/NR}'
else
echo " directory doesn't exits"
fi

if [ -d "ls -1A -- $dir" ]
then
echo " directory is empty "
fi

スクリプトを実行すると、出力は次./123.sh のようになります。

「議論を伝えてください。」

パラメータを持つスクリプトに似ています./123.sh hdkjflkjds

「正しい引数を渡してください。」

引数mntsに似たスクリプトが./123.sh /usr/share 出力を表示する必要があります。

$> ./123.sh /usr/share
    Minimum file size: 1024
        /usr/share/lala.txt
        /usr/share/koko.txt
    Maximum file size: 100234
        /usr/share/somewhere/else/test.tar.gz
    Average file size: 5034

最後に、パラメータ(空のディレクトリパスなど)を使用してスクリプトを実行すると、/usr/bin $と言われます。./123.sh /usr/bin

以下が表示されます。

「ディレクトリが空です。」

代わりに、このようなエラーが表示されます。

$> ./123.sh /usr/bin
        Minimum file size: 1024
            /usr/bin/lala.txt
            /usr/bin/koko.txt
        Maximum file size: 100234
            /usr/bin/somewhere/else/test.tar.gz
        Average file size: 5034

誰でも私のコードをチェックし、私が犯した間違いを見つけることができますか?

ベストアンサー1

によるとman testhttp://unixhelp.ed.ac.uk/CGI/man-cgi?test[ -d $dir ])現在持っているものを使用する方が良いです[ -e $dir ]

[ -d "ls -1A -- $dir" ]結果が空かどうかをテストしたいと思います。以下を使用してよりよくテストできます。[ -z "$(ls -1A -- $dir)" ]

入れ子テストの例は次のとおりです。

if [ -d $dir ]
then
    if [ -z "$(ls -1A -- $dir)" ]
    then
         echo "Directory exists but is empty"
    else
         ... do your magic ...
    fi
else
    echo "directory does not exist"
fi

おすすめ記事