현재 /var/log/secure 파일을 확인하고 해당 날짜에 실패한 시도 횟수를 보고하는 스크립트를 작성 중입니다. 다음 형식으로 출력해야 합니다.
Date: 03/15/10 Time: 10:30 Number of failed attempts: 8
지금까지의 코드는 다음과 같습니다(별도의 작업은 수행하지 않음). 내가 올바른 방향으로 가고 있나요?
#!/bin/bash
classGID=5000
passfile=/var/log/secure
for i in $(grep ${classGID} ${passfile} | cut -d: -f1)
do
date=$(grep $i{passfile} | cut -d: -f2)
echo "Date: ${date}"
done
답변1
#!/usr/bin/env bash
c=1
while read line
do
a=( $line )
d="${a[@]::3}"
logdate=$( date '+%F' -d"$d" )
if [[ $logdate == $old_logdate ]]; then
(( c++ ))
elif [[ $old_logdate != $logdate ]]; then
printf "%s\t%s\t%s%s\n" "Date: $old_logdate Number of failed attempts: $c"
old_logdate=$logdate
c=1
continue
else
printf "%s\t%s\t%s%s\n" "Date: $logdate Number of failed attempts: $c"
fi
done < <(grep 'authentication failure' /var/log/secure)
마지막 레코드를 건너뛰는데 이유를 모르겠습니다.