사용자 입력의 변수에 있는 파일 경로

사용자 입력의 변수에 있는 파일 경로

사용자가 특정 파일에 대한 경로를 제공하고 스크립트가 파일이 존재하는지 확인하고 일부 작업을 수행하는 스크립트를 만들려고 합니다. 다음 코드를 작성했습니다.

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" ]

관련 정보