2017-10-11 1 views
0

내 bash 스크립트의 첫 번째 명령은 기존 파일의 grep 오류입니다. EX : 내가 스크립트가 계속할지하지 않을 경우이를 새 비어 (PartialBackups 파일) 내가 스크립트를 종료하려면이있다배시, 파일이 비어있는 경우 계속하지 않을 경우 스크립트 남기기

cat /usr/local/avamar/var/ddrmaintlogs/ddrmaint.log | grep "hfscheck-finish Backup directory missing for backup" > PartialBackups 
cat PartialBackups | sed -n -e 's#^.*cur/ ##p' >P2           
cat P2 | sed 's#/#//#g' > P3                
cat P3 | awk {'print $1'} >> S1                
cat P3 | awk {'print $3'} >> S2 

경우

내가 어떻게 할 수 있습니까?

+0

접근 방법이 잘못되었으므로 게시 한 스크립트 전체가 awk에 대한 단일 호출이어야합니다. 간결하고 테스트 가능한 샘플 입력 및 예상 출력을 포함하도록 질문을 편집 한 다음 awk로 태그를 지정하면 우리가 도울 수 있습니다. 또한,'{print $ 1} '대신'{'print $ 1 '}'안에 ** 스크립트 구분 기호 ** (''')가 ** 들어가야한다는 생각을 어디서 얻었습니까? ? 나는 몇 사람이 그것을하는 것을 보았으며 그 생각이 어디에서 오는지 궁금합니다. –

답변

1

grepif 문에 넣으십시오.

if ! grep -err /file >> newfile; then 
    exit 
fi 

newfile 또는 빈하지 않을 수 있습니다 - 당신은 시작하는 가능성이 비어 있지 않은 파일에 추가된다 -하지만 아무것도 추가하지 않는 경우 grep는 0이 아닌 종료 상태가됩니다 파일에. 파일이 존재 0이 아닌 크기가있는 경우

+0

'grep' 명령에 직접'>> newFile'을 첨부 할 것입니다; 그렇지 않으면 이것이 가장 좋은 답처럼 보입니다. –

+0

이제 나는 왜 그것이 if 문에 있어야한다고 생각하는지 알아 내려고 노력하고있다. – chepner

0

당신은 덜 분명 구문

test -s "/file" && exit 

test -s 테스트를

if ! [ -s "/file" ];then 
    exit 
fi 

이하를 사용할 수 있습니다. 두 번째 구문은 익스플로잇입니다. 이진 연산자는 필요한만큼만 평가하므로 양수 반환 값 testexit이 실행되지 못하게합니다.식이 false가 될 수 있습니다.