사용자가 로그인했는지 검색하는 awk 명령이 있습니까?

사용자가 로그인했는지 검색하는 awk 명령이 있습니까?

awk를 사용하여 텍스트 파일을 조작하기 위한 것이므로 누군가 온라인 상태인지 확인할 수 있는지 잘 모르겠습니다. 다음과 같이 grep 명령을 사용하여 이 작업을 수행하는 방법을 알고 있습니다.

 who | grep 'name'

그런 다음 해당 사람이 로그인했는지 여부를 표시합니다. awk의 구문은 다음과 같습니다.

awk options 'selection _criteria {action }' input-file

awk가 파일 조작에 흔히 사용된다면, awk를 사용하는 사람을 어떻게 찾을 수 있을까요?

답변1

#! /bin/sh -

is_logged_in() {
  who | USER=$1 awk -v ret=1 '
    $1"" == ENVIRON["USER"]"" {ret = 0; exit}
    END {exit(ret)}'
}

if is_logged_in root; then
  echo root is logged in
fi

이는is_logged_in 껍데기사용자 이름을 매개변수로 사용하는 함수입니다. 환경 변수에 전달한 함수 매개변수를 이 출력에 공급합니다 who.awkUSER

코드 awk는 각 레코드를 차례로 처리합니다. 레코드의 첫 번째 필드가 이 환경 변수(여기서 ""문자열 비교를 강제하기 위해 피연산자에 첨부됨)의 값과 같은 경우 종료 상태는 0(성공)으로 종료됩니다.

그런 다음 이 함수를 명령문에서 사용하여 if사용자가 로그인했는지 확인할 수 있습니다.

답변2

awk 및 외부 명령을 사용하여 가능한 접근 방식 중 하나의 예:

is_logged($1) { print $1, "is present!"}

function is_logged(x,a){                     ## a local var
  "who|grep -w " x | getline a
  return a
}

그런 다음:

$ awk -f test
abc
Darunia

--> Darunia is present!

관련 정보