programing

bash if/else 문 안에서 파일 grep 비교를 사용하려면 어떻게 해야 합니까?

newstyles 2023. 5. 29. 09:56

bash if/else 문 안에서 파일 grep 비교를 사용하려면 어떻게 해야 합니까?

서버가 나타나면 파일을 확인하여 서버가 어떻게 구성되어 있는지 확인해야 합니다.

/etc/aws/hosts.conf 파일 내에서 다음 문자열을 검색하려고 합니다.

MYSQL_ROLE=master

그런 다음 해당 문자열의 존재 여부를 테스트하고 if/else 문을 사용하여 문자열의 존재 여부에 따라 두 가지 옵션 중 하나를 실행하려고 합니다.

if 문에 대한 BASH 구문은 무엇입니까?

if [ ????? ]; then
  #do one thing
else
  #do another thing
fi

부터grep --help하지만 맨그렙도 봅니다.

선택한 라인이 있으면 종료 상태는 0이고, 그렇지 않으면 1이며, 오류가 발생하고 -q가 지정되지 않은 경우 종료 상태는 2입니다.

if grep --quiet MYSQL_ROLE=master /etc/aws/hosts.conf; then
  echo exists
else
  echo not found
fi

다음과 같은 보다 구체적인 정규식을 사용할 수 있습니다.^MYSQL_ROLE=master$주석, "master"로 시작하는 이름 등에서 해당 문자열을 사용하지 않도록 합니다.

는 if가 명령을 사용하여 실행하고 해당 명령의 반환 값을 사용하여 0이 true를 의미하고 0이 아닌 false를 의미하는 방식을 결정하기 때문에 작동합니다. 이는 셸에서 다른 반환 코드를 해석하는 방식과 동일하며 C와 같은 언어의 반대입니다.

if명령을 사용하여 반환 값을 확인합니다. [명령일 뿐입니다.

if grep -q ...
then
  ....
else
  ....
fi

참고:PIPE명령어 또는 명령어 시퀀스가 되는 경우:

if PIPE ; then
  # do one thing if PIPE returned with zero status ($?=0)
else 
  # do another thing if PIPE returned with non-zero status ($?!=0), e.g. error
fi 

기록을 위해.[ expr ]의 줄임말로 만들어진 쉘입니다.test expr.

부터grep일치하는 경우 상태가 0이고 일치하지 않는 경우 상태가 0이 아닌 경우 다음을 사용할 수 있습니다.

if grep -lq '^MYSQL_ROLE=master' ; then 
  # do one thing 
else 
  # do another thing
fi 

의 사용에 주의합니다.-l파일에 일치하는 항목이 하나 이상 있는 것에만 관심이 있습니다.grep입력 파일을 계속 구문 분석하지 않고 일치하는 항목을 찾는 즉시 반환됩니다.)

일부 플랫폼에서[ expr ]기본 제공 파일이 아니라 실제 실행 파일입니다./bin/[(마지막 인수가 다음과 같을 것입니다.]), 이것이 이유입니다.[ expr ]는 대괄호 주위에 공백을 포함해야 하며, 그 뒤에 명령 목록 구분 기호) 중 하나를 사용해야 하는 이유입니다.;,&&,||,|,&줄 바꿈)

그냥 bash를 사용합니다.

while read -r line
do
  case "$line" in
    *MYSQL_ROLE=master*)
       echo "do your stuff";;
    *) echo "doesn't exist";;      
  esac
done <"/etc/aws/hosts.conf"

아래 코드 샘플이 작동해야 합니다.

(echo "hello there" | grep -q "AAA") && [ $? -eq 0 ] && echo "hi" || echo "bye"

언급URL : https://stackoverflow.com/questions/2480584/how-do-i-use-a-file-grep-comparison-inside-a-bash-if-else-statement