파일 검사 스크립트에 어떤 문제가 있나요?

파일 검사 스크립트에 어떤 문제가 있나요?

파일이나 디렉터리를 찾을 수 없는데 왜 스크립트의 마지막 부분에 아무 것도 표시되지 않는지 이해할 수 없습니다.

echo -n "Please enter a filename or directory: "
read filename
if [ -z "$filename" ]; then
  echo "You did not enter anything!"
  exit 1
fi
if [ -e "$filename" ]; then
  if [ -f "$filename" ]; then
    echo "You entered a file."
  elif [ -d "$filename" ]; then
    echo "You entered a directory."
  else
    echo "You did not enter a valid file or directory."
  fi
fi
exit

내 코드에 어떤 문제가 있는지 모르겠습니다. 유효하지 않거나 존재하지 않는 파일이나 디렉터리를 입력하면 에코가 표시되지 않습니다.

답변1

문을 들여쓰기 위해 스크립트 형식을 다시 지정했습니다 if. 그렇게 하면 마지막이 참이고 거짓인 echo경우에만 발생한다는 것이 더 명확해졌습니다 . 사용자가 존재하지 않는 파일이나 디렉터리를 입력하면 실패합니다.-f-d-f

마지막 섹션에 대해 다음 개정을 고려하세요.

if [ -e "$filename" ]; then
  if [ -f "$filename" ]; then
    echo "You entered a file."
  elif [ -d "$filename" ]; then
    echo "You entered a directory."
  fi
else
  echo "You did not enter a valid file or directory."
fi

첫 번째 문의 실제 섹션이 if더 일찍 끝나는 경우( else); 존재하지 않는 파일/디렉토리에는 실행할 코드 섹션이 있습니다.

답변2

이 코드에는 출력이 발생하지 않는 다른 유형의 파일이 많이 있습니다. 여기에는 기호 링크, 명명된 파이프, 소켓, 블록 및 문자 특수 파일이 포함됩니다. 특히, /dev/tty, /dev/stdin/dev/stdout/dev/stderr코드에서 감지되지 않고 실패합니다.

이를 설명하기 위해 논리를 수정할 수 있지만 이 구조(case 문 스타일 구조)가 읽기 쉽고 오류 발생 가능성이 적습니다.

if [ ! -e "$filename" ]; then
    echo "$filename does not exist"
    exit 1
elif [ -f "$filename" ]; then
    echo "You entered a file."
elif [ -d "$filename" ]; then
    echo "You entered a directory."
else 
    echo "$filename is not a regular file or directory."
    exit 2
fi

관련 정보