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その日付を取得せずに指定されたユーザーに対して仮定するようにスクリプトに小さな調整を追加しました。

また、それを実行するユーザーには、指定されたユーザーのホームディレクトリとその中のファイルを調べる権限が必要です。

おすすめ記事