Usando a instrução if / else no awk

0

Normalmente, posso detectar a hora do último logon do usuário se last retornar qualquer coisa por meio da função abaixo. Minha pergunta é: se last não retornar nada, então eu quero procurar na data e hora do diretório pessoal do usuário o arquivo modificado mais recentemente.

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
        }
    }
}'
}
    
por Cell-o 20.03.2018 / 18:40

1 resposta

1

A seguinte modificação do seu script parece funcionar:

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

Eu adicionei um pequeno ajuste ao script awk que retira a linha dizendo quando o wtmp log começa, para que ele não retire essa data e assuma que é para o usuário especificado.

Além disso, observe que isso exige que o usuário que o executa tenha permissão para inspecionar o diretório pessoal do usuário especificado e os arquivos nele contidos.

    
por 20.03.2018 / 19:37

Tags