2014-11-12 2 views
0

루프를 사용하여 로그인하는 사람의 수를 tty 찾으려고합니다. 지금까지 내 코드는 다음과 같습니다.로그인 한 사용자의 tty 찾기

if [ "$#" -ne 1 ] 
then 
    echo "Usage: mon user" 
    exit 1 
fi 

user="$1" 

# 


until who | grep "^$user " > /dev/null 
do 
    tty=$(who | cut -c 9-13) 
    sleep 60 
done 

echo "$user has logged onto $tty" 

첫 번째 행에서만 9-13 사이의 문자 만 잘라내려면 어떻게해야합니까? 둘째, 올바르게 했습니까? 나는 일할 사람이 없어도 실제로 테스트 할 수 없습니다.

+0

사용자 아이디로 테스트 할 수없는 이유는 무엇입니까? 행운을 빕니다. – shellter

답변

2

루프가 정말 추출물을 seach 할 필요가 없습니다과 같이 많은 코드를 줄일 수있는 것이 무엇

if [ "$#" -ne 1 ] 
then 
echo "Usage: mon user" 
exit 1 
fi 

tty=$(who | grep "$user" | awk '{print $2}') 

echo "$user has logged onto $tty" 

예를

를 들어 usertty

?

  • who 목록은에 $user

  • awk '{print $2}' AWK 인쇄 번째 칼럼을 포함하는 라인에 대한 사용자의

  • grep "$user" 검색을 기록한 자 출력

할 수 cut i도 사용하십시오. 프로그램에서와 같이 awk의 nstead. 그러나 문자가 -f 옵션을 사용하는 대신 선택 -c 옵션을 사용하는

  • -f 2이 두 번째 필드를 선택

    who | grep "$user" | cut -d\ -f 2 
    
    • -d\처럼

      공간에 delimtter을 설정 필드를 선택할 것이다 출력에서

  • +0

    스크립트의 O.P.s 이름 인'mon'을 주목하십시오. 나는 그들이 (tty를 얻을뿐만 아니라) 로그인 할 누군가를 "감시"하고 싶다고 생각하지만 헤드 라인에 게시 된 질문에 답했습니다! – shellter

    +0

    @shellter 그래, 사실 나는 그것도 생각했다. 어쨌든 대답은 속임수를 쓸 것입니다 :) – nu11p01n73R

    +0

    당신은 내 질문에 답을하고 싶었습니다. 방금 쓸모없는 정보를 많이 추가했습니다. – user1725798

    관련 문제