Linux 명령줄의 if 구문

Linux 명령줄의 if 구문

이 명령줄(Centos 7)에 어떤 문제가 있나요?

if (grep ssl_certificate /etc/nginx/conf.d/platform.conf)
then echo $(grep ssl_certc /etc/nginx/conf.d/file.conf) > /etc/nginx/conf.d/file-certs.conf
fi

file.conf에는 ssl_certificate 및 ssl_certificate_key를 포함하는 두 줄이 있습니다. 기존 SSL 인증서를 /etc/nginx/conf.d/file.conf에서 /etc/nginx/conf.d/file-certs.conf로 이동해야 합니다.

답변1

아무것도 없다구문론적으로코드 조각에 오류가 있지만 일반적이지 않습니다.

파일에서 문자열이 발견되었는지 테스트 grep하고 발견된 경우 일부 작업을 수행하려면 다음을 사용하십시오.

if grep -qwF ssl_certificate /etc/nginx/conf.d/platform.conf; then

options -q, -w그리고 quit( )을 -F만들고 정규식( ) 대신 고정 문자열로 주어진 패턴을 일치시킵니다 . 추가적으로 , 완전한grep-q-F-wgrep단어. 이 경우 문자열은 ssl_certificate3다음과 같습니다.아니요패턴을 일치시킵니다.

grep파일에서 문자열이 발견되면 종료 상태 0이 반환되고 문의 본문이 if실행됩니다.

성명서

echo $(somecommand)

일종의 쓸모가 없습니다.

명령 대체는 $(somecommand)의 출력으로 대체되며 somecommand쉘은 결과 문자열에 대해 토큰화 및 파일 이름 생성을 수행합니다(불필요할 수 있음). 방금 끝낼 수 있었기 때문에 그것을 사용해도 echo소용이 없습니다.

somecommand

전체 if내용:

if grep -qwF ssl_certificate /etc/nginx/conf.d/platform.conf; then
    grep -wF ssl_certc /etc/nginx/conf.d/file.conf >/etc/nginx/conf.d/file-certs.conf
fi

(이것은 ssl_certc완전한 단어라고 가정합니다. 그렇지 않으면 -w단어에서 제거하십시오 grep)

또는 단락 구문을 사용하여

grep -qwF ssl_certificate /etc/nginx/conf.d/platform.conf &&
grep  -wF ssl_certc /etc/nginx/conf.d/file.conf >/etc/nginx/conf.d/file-certs.conf

이 됩니다.씌우다/etc/nginx/conf.d/file-certs.conf파일이 존재하는지 여부. 다음 으로> 변경>>추가의덮어쓰지 않으려면 파일이 대신 기록됩니다.

관련 정보