ディレクトリパスが与えられると、最小、最大、および平均ファイルサイズで少なくとも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 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