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