나는 작은 bash 스크립트를 작성했습니다. 그것은 단어를 찾으려고 노력할 것입니다실수. 발견되면 결과 값은 0이 아닌 숫자(예: 25. 스크립트에서 언급했지만 변수 숫자 값입니다)가 되고, 발견되지 않으면 0이 됩니다.
case
내 질문은: 출력이 0이 아닌 경우 다음 명령이 실행되도록 명령문을 사용하고 싶습니다.
truncate -s 0 /root/test/wayfile.log && screen -X -S wowow quit &
스크립트는 여기에 있습니다:
#! /bin/bash
case "$(grep ERROR /root/test/wayfile.log | wc -w)" in
25) echo "empty log file and kill screen: $(date)" >> /var/log/finderror.txt
truncate -s 0 /root/test/wayfile.log && screen -X -S wowow quit &
;;
0) # all ok
;;
esac
답변1
한 가지 옵션: case
을 찾으라고 지시합니다 0
. 이 경우: 아무것도 하지 않습니다.그렇지 않으면, 명령을 실행하십시오.
case X in
(0) : ## do nothing
;;
(*) truncate ...
;;
esac
또 다른 옵션: case
0이 아닌 숫자를 찾도록 지시합니다.
case X in
([123456789]) truncate ...
esac
...하지만 숫자를 일치시키는 대신 다음을 사용 case
합니다 test
.
if [ "$(grep -c ERROR /root/test/wayfile.log)" -gt 0 ]
then
truncate ...
fi
나는 그것을 grep ... | wc -w
단지 로 단순화했는데 grep -c
, 이는 grep
를 포함하는 것보다 계산이 필요합니다 wc
.
게다가 당신이니까진짜ERROR
해당 단어가 파일에 존재하는지 여부에만 관심이 있으면 grep
해당 단어가 존재하는지 물어볼 수 있습니다.
if grep -F -q ERROR /root/test/wayfile.log
then
truncate ...
fi
이 -F
플래그는 grep에게 검색 텍스트가 일반 텍스트("고정")임을 알려줍니다. 이 -q
플래그는 grep에게 "조용함"을 지시합니다. 일치하는 줄을 계산하거나 출력하지 않고 텍스트가 발견되었는지 여부에 따라 검색합니다. 아님) 종료 상태를 설정합니다. 성공적인 종료 코드(0)는 검색 텍스트가 파일에서 한 번 이상 발견되었음을 의미하고, 실패는 검색 텍스트가 파일에서 전혀 발견되지 않았음을 의미합니다.