디렉토리 경로가 주어지면 최소, 최대 및 평균 파일 크기로 하나 이상의 파일을 인쇄해야 하는 ./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