awk에서 if/else 문 사용하기

awk에서 if/else 문 사용하기

last일반적으로 다음 함수를 통해 반환되는 항목이 있으면 사용자의 마지막 로그인 시간을 감지할 수 있습니다. 내 질문은 다음과 같습니다. last아무것도 반환되지 않으면 사용자의 홈 디렉터리 날짜 및 시간에서 가장 최근에 수정된 파일을 찾고 싶습니다.

lastlogLatest() {
    last -n 1 "${userName}"  | awk ' {
    for( i=1;i<=NF;i++ ) {
        if ( $i ~ /Mon|Tue|Wed|Thu|Fri|Sat|Sun/ ) {
            j = 0
            str = ""
            for ( j=i; j<=NF;j++ ) {
                str = ( str ? (str FS $j):$j )
            }
            print str
            break
        }
    }
}'
}

답변1

스크립트를 다음과 같이 수정하면 작동하는 것 같습니다.

lastlogLatest() {
    last -n 1 "${userName}"  | awk ' $1 != "wtmp" {
    for( i=1;i<=NF;i++ ) {
        if ( $i ~ /Mon|Tue|Wed|Thu|Fri|Sat|Sun/ ) {
            j = 0
            str = ""
            for ( j=i; j<=NF;j++ ) {
                str = ( str ? (str FS $j):$j )
            }
            print str
            break
        }
    }
}'
}
userName=somebody
lastlogin=$(lastlogLatest)
if [[ -z "$lastlogin" ]]; then
    echo "${userName} not found in lastlog"
   if cd /home/${userName} 2> /dev/null; then
      date -d "@$(find . -type f -printf '%T@\n' 2> /dev/null | sort -n | head -n1)"
   else
      echo "No home directory found for ${userName}" 1>$2
   fi
else
    echo "$lastlogin"
fi

awk로그가 시작된 시기를 알려주는 줄을 제거하여 wtmp해당 날짜를 가져오지 않고 지정된 사용자에 대한 것으로 가정하도록 스크립트에 작은 조정을 추가했습니다 .

또한 이를 실행하는 사용자는 지정된 사용자의 홈 디렉터리와 그 안에 있는 파일을 검사할 수 있는 권한이 있어야 합니다.

관련 정보