빈 출력에 대한 응답으로 if 문을 사용해야 합니다. 나는 가지고있다:
while read -p "Enter filename: "
do Extant=$(ls | grep $name)
echo "$Extant"
결과를 저장하고 표시합니다. 괜찮습니다...파일 이름이 존재하지 않을 때까지는요. 나는 그것을 원한다:
$Extant가 비어 있는지(파일이 존재하지 않음을 나타냄) 테스트합니다.
그리고 "여기는 없어요"와 같은 말로 응답합니다.
그런 다음 while 루프로 돌아갑니다.
그렇지 않으면
while 루프로 돌아가십시오(존재하는 경우 일치하는 파일을 출력하므로).
나는 처음에 다음과 같은 방법으로 이 작업을 수행할 수 있다고 생각했습니다.
if $Extant=""
then echo "it's not here"
return
else
return
fi
그러나 그것은 내가 바라던 대로 되지 않았다. 명령과 마찬가지로 찾은 내용을 계속 실행하려고 시도합니다.
여기서 무슨 일이 일어나고 있는지 잘 모르겠지만 도움을 주셔서 감사합니다.
답변1
여기서는 ls
둘 다 사용하고 싶지 않습니다 grep
. ls
주로시각적grep
주로 큰 텍스트에서 텍스트 줄을 반환하는 데 사용되는 디렉터리 내용을 확인하세요 .
IFS= read -r -p 'Filename please: ' name
while [[ ! -e $name ]]; do
printf '%s does not exist\n' "$name"
read -p 'Try again: ' name
done
printf '%s exists\n' "$name"
해당 이름이 파일 시스템에 존재하면 테스트 -e
는 참입니다 . 여기서는 루프 테스트의 요점을 부정합니다.
두 번의 별도 호출을 피하려면 다음을 수행하십시오 read
.
while true; do
IFS= read -r -p 'Filename please: ' name
[[ -e $name ]] && break
printf '%s does not exist\n' "$name"
done
printf '%s exists\n' "$name"
break
$name
이 루프는 주어진 값이 파일 시스템에 존재하는 한 종료됩니다.
이러한 변형 중 어느 것도 개행 문자가 포함된 파일 이름을 읽을 수 없습니다(개행 문자는 Unix 시스템의 파일 이름에 유효합니다).
사용자가 파일 이름을 명령줄 인수로 스크립트에 전달하는 것이 더 편리한 경우가 많습니다. 즉, 셸의 파일 이름 완성 기능이나 파일 이름 글로빙 패턴을 사용하여 파일 이름을 제공할 수 있습니다.
#!/bin/bash
name=$1
if [[ ! -e "$name" ]]; then
printf '%s does not exist\n' "$name"
exit 1
fi
printf '%s exists\n' "$name"
위 스크립트는 단일 파일 이름을 유일한 인수로 사용하여 실행될 것으로 예상합니다. 주어진 이름의 존재와 관련된 메시지를 인쇄합니다. 해당 이름이 존재하지 않으면 스크립트는 if
명령문 내에서 종료되며 사용자는 다시 시도해야 합니다.
이 변화회의.read
관련된: