发现目录为空时出现错误

发现目录为空时出现错误

我有一个要求,创建一个脚本名称,例如 ./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

“请传递正确的论点”。

类似于带有 argumentmnts 的脚本./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

相关内容