케이스… 인, 파일형 케이스

케이스… 인, 파일형 케이스

$1일자리를 얻었는데 그것이 파일인지, 특수 파일인지, 폴더인지 테스트해야 합니다.사례 $1진술서.

몇 가지를 시도했지만 제대로 작동하지 못했습니다. 이것을 구현하는 방법에 대한 아이디어가 있습니까(in Case 문)

내가 달성해야 할 것은 다음과 같습니다.

if [ -f $1 ]
then
    exit 1
elif [ -d $1 ]
then
    exit 2
elif [ -c $1 -o -b $1 ]
then
    exit 3
else
    exit 0
fi

나는 최종 코드를 요구하는 것이 아니라 다음 작업을 수행하는 방법을 요구하는 것입니다.

Case $1 in
    -d) ...

답변1

if귀하가 게시한 - 기반 코드는 충분히 단순해 보이기 때문에 구문을 사용하기 위한 요구 사항이 case약간 이상합니다. 다음을 제공하는 파일 형식 정보를 검색할 수 있을 것 같습니다 ls -l.

case "$(ls -ld -- "$1")" in
    -*) echo 'Regular file' ;;
    d*) echo 'Directory' ;;
    *)  echo 'other' ;;
esac

답변2

제가 선택한 솔루션은 다음과 같습니다.

filetype=$(stat -c%F "$1")
exitcode=$?

if [ $exitcode -eq 0 ]
then
    case "$filetype" in
        "regular file") exit 1;;
        "directory") exit 2;;
        *) exit 3;;
    esac
else
    exit 0
fi

통계가 실패하면(파일이 존재하지 않음) 여전히 오류가 표시되지만 정상적으로 작동합니다. 감사해요

관련 정보