Bash 스크립트 Case 문(if-not 논리)

Bash 스크립트 Case 문(if-not 논리)

나는 작은 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

또 다른 옵션: case0이 아닌 숫자를 찾도록 지시합니다.

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)는 검색 텍스트가 파일에서 한 번 이상 발견되었음을 의미하고, 실패는 검색 텍스트가 파일에서 전혀 발견되지 않았음을 의미합니다.

관련 정보