![파일 검사 스크립트에 어떤 문제가 있나요?](https://rvso.com/image/76407/%ED%8C%8C%EC%9D%BC%20%EA%B2%80%EC%82%AC%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%20%EC%96%B4%EB%96%A4%20%EB%AC%B8%EC%A0%9C%EA%B0%80%20%EC%9E%88%EB%82%98%EC%9A%94%3F.png)
파일이나 디렉터리를 찾을 수 없는데 왜 스크립트의 마지막 부분에 아무 것도 표시되지 않는지 이해할 수 없습니다.
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