if 문을 사용하여 grep의 출력을 테스트하는 방법

if 문을 사용하여 grep의 출력을 테스트하는 방법

빈 출력에 대한 응답으로 if 문을 사용해야 합니다. 나는 가지고있다:

while read -p "Enter filename:   "
do Extant=$(ls | grep $name)
echo "$Extant"

결과를 저장하고 표시합니다. 괜찮습니다...파일 이름이 존재하지 않을 때까지는요. 나는 그것을 원한다:

  1. $Extant가 비어 있는지(파일이 존재하지 않음을 나타냄) 테스트합니다.

  2. 그리고 "여기는 없어요"와 같은 말로 응답합니다.

  3. 그런 다음 while 루프로 돌아갑니다.

    그렇지 않으면

  4. 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


관련된:

관련 정보