while 루프에서 명령 부정을 사용하기 위해 쉘 스크립트에서 grep을 사용하는 방법은 무엇입니까?

while 루프에서 명령 부정을 사용하기 위해 쉘 스크립트에서 grep을 사용하는 방법은 무엇입니까?

while 루프와 grep을 동시에 사용할 수 있는 방법이 있습니까? 내 예를 보세요:

while  [[  !(grep -R -h "${text}" ${path}) ]];
do
    ...
done

그것은 말한다:

./test_script.sh: line 1: conditional binary operator expected
./test_script.sh: line 1: expected `)'
./test_script.sh: line 1: syntax error near `-R'
./test_script.sh: line 1: `while  [[  !(grep -R -h "${text}" ${path}) ]];'

답변1

  1. 명령을 대괄호 안에 넣지 마십시오. 성공 시(즉, 실패할 때까지) 반복 하려면 grep다음을 수행하세요.

    while grep ...
    do
    done
    
  2. grep실패 시(즉, 성공할 때까지) 반복 하려면 다음을 수행하십시오.

    while ! grep ...
    do
    done
    

    !및 명령(예: 하나 이상의 공백 및/또는 탭).

  3. "$path"타당한 이유가 없고 수행 중인 작업을 확실히 알고 있지 않는 한 항상 쉘 변수 참조(예: )를 인용해야 합니다 . 그에 비해 교정장치는 중요하지만, 따옴표만큼 중요하지 않습니다.이므로 and 이면 충분합니다( "$text"이 경우 and 를 "$path"사용할 필요가 없습니다 "${text}")."${path}"

    ...다음과 같이 path설정되지 않은 경우목록파일 이름, 이 경우 참조 bash/POSIX 셸에서 변수를 참조하는 것을 잊어버린 것이 보안에 미치는 영향 - 하지만 만약...?

  4. ;줄 끝에 세미콜론( )은 필요하지 않습니다 while( do그 뒤에 세미콜론을 추가하지 않는 한). 즉, whileline과 the는 do세미콜론으로 구분되어야 합니다.그리고/또는하나 이상의 개행 문자입니다.

관련 정보