다음 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
그렇다면 아마도 더 분명하게 이것은 -z
or 명령의 표시일 것입니다.[
test
명령의 출력을 grep
명명된 문자열에 넣은 다음 해당 문자열을 포함하는 results
명명된 단일 요소 배열을 만듭니다 . lines
아마도 당신은 이미 몇 가지 계획을 가지고 있을 것입니다. lines
그러나 지금은 이것은 단지 방해일 뿐입니다.
당신의 요점에 관해서는
[ -e ~/makt/current/log/production.log ]
파일이 존재하는지 알려줄 수 있습니다$results
그것은 항상 거기에 있습니다. 물론 비어 있을 수도 있지만 당신이 그것을 창조했습니다.${#results}
문자 수입니다$results