사용자가 특정 파일에 대한 경로를 제공하고 스크립트가 파일이 존재하는지 확인하고 일부 작업을 수행하는 스크립트를 만들려고 합니다. 다음 코드를 작성했습니다.
read -p "Enter path: " $path
#check if path is not empty string
if [ -z $path ]
then
echo "path is empty string"
exit
fi
#check if file exist
if [ ! -f $path ]
then
echo "file doesnt exists"
fi
내 문제는 두 번째 조건입니다. 일부 문자열을 변경하면 $path
모든 것이 잘 작동하지만 변수를 통해 경로를 입력하면 항상 "파일이 존재하지 않습니다"라는 메시지가 표시됩니다.
if [ ! -f `$path` ]
그러나 파일에 실행 권한이 없으면 결과도 실패합니다. 누군가 위 코드를 수정하도록 도와줄 수 있나요? :)
편집하다죄송합니다. 이중 조건부라는 뜻은 아니 -z
었습니다 .-f
-z
답변1
여기서 문제는 백틱입니다.
`command`
명령을 실행하고 해당 출력 스트림(표준 및 오류)을 결과로 바꾸는 데 사용됩니다. 따라서 실행 권한 없이 파일을 제공하면 테스트가 실패합니다.
이 문제를 해결하는 방법
사용
if [ -f "$path" ]
큰따옴표는 단어 분리(공백이 포함된 경우) 및 와일드카드(경로에 *
또는 등의 와일드카드가 포함된 경우 ?
)를 방지하기 위한 것입니다.
더 좋은 점은 경로가 디렉터리일 수 있으므로 다음을 사용하여 경로가 존재하는지 확인하면 됩니다 -e
.
if [ -e "$path" ]