로그 파일에 문자열이 누락된 경우 이메일을 보내주세요. 입력 검증

로그 파일에 문자열이 누락된 경우 이메일을 보내주세요. 입력 검증

다음 bash 스크립트는 파일을 읽고 주어진 문자열을 검색하려고 시도합니다. 이 경우에는 긍정적인 결과가 나와야 합니다. 길이가 0인 경우, 즉 문자열을 찾을 수 없는 경우 이메일은 Postfix(전송 전용)를 사용하여 전송됩니다.

#!/bin/bash

results=$(grep "Parameters: {\"id_at_chain\"=>\"001142\", \"articles\"" ~/makt/current/log/production.log)
lines=($results)
if [ -z "$results" ]; then
  echo "array articles 001142 missing" | mail -s "problem 001142" [email protected] [email protected]
fi

내가 원하는 것은 테스트할 몇 가지 유효성 검사 코드를 넣는 것입니다(그리고 로그 파일에 덤프할 수도 있음).
• 파일이 발견되었는지 여부
$results존재하는지 여부
• 파일의 길이$results

할 수 echo $results있고 예상한 결과를 제공하지만 출력이 길이가 아닌
echo -z "$results" 것 같습니다.$results

답변1

문제는 [명령이 아닌 일종의 쉘 구문으로 생각한다는 것입니다. 코드를 작성하는 또 다른 방법은 다음과 같습니다.

if test -z "$results" ; then

그렇다면 아마도 더 분명하게 이것은 -zor 명령의 표시일 것입니다.[test

명령의 출력을 grep명명된 문자열에 넣은 다음 해당 문자열을 포함하는 results명명된 단일 요소 배열을 만듭니다 . lines아마도 당신은 이미 몇 가지 계획을 가지고 있을 것입니다. lines그러나 지금은 이것은 단지 방해일 뿐입니다.

당신의 요점에 관해서는

  • [ -e ~/makt/current/log/production.log ]파일이 존재하는지 알려줄 수 있습니다
  • $results그것은 항상 거기에 있습니다. 물론 비어 있을 수도 있지만 당신이 그것을 창조했습니다.
  • ${#results}문자 수입니다$results

관련 정보