파일이나 디렉터리를 찾을 수 없을 때 스크립트의 마지막 부분에 아무것도 표시되지 않는 이유를 이해할 수 없습니다.
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