디렉토리가 비어 있을 때 오류가 발견되었습니다.

디렉토리가 비어 있을 때 오류가 발견되었습니다.

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

관련 정보