bash who, grep 질문

bash who, grep 질문

안녕하세요, bash에 문제가 있습니다. 백그라운드에서 작동하는 "스크립트"가 필요하며 sleep 60은 사용자(로그인이 매개변수로 추가됨)가 서버에서 작업 중인지 확인합니다. 사용자가 로그인하면 "hello" 기호가 표시되어야 합니다. person 온라인 사인입니다. "죄송합니다. 번역 연습이 좀 어렵습니다.

#!/bin/sh
who | cut -d " " -f1 | grep $1> /dev/null
z=$?
until [ $z -eq 0 ] ; do
sleep 10
who | cut -d " " -f1 | grep $1> /dev/null
z=$?
done
echo "hello $1" | write $1

학교 서버 대신 내 컴퓨터에서 실행해 보았습니다. 가능합니까? 이것이 내가 돌려받는 것입니다:

Usage: grep [OPTION]... PATTERNS [FILE]...
Try 'grep --help' for more information.

답변1

이것은 내 버전의 스크립트입니다.

#!/bin/sh
if [ $# -lt 1 ]
then echo Missing user name; exit 1
elif ! grep -q $1 /etc/passwd
then echo No such user: $1; exit 2
fi

until who | cut -d " " -f1 | grep -q $1
do sleep 10
done
echo "hello $1" | write $1

먼저 유효한 사용자 이름이 존재하는지 확인하는 검사를 추가했습니다.

until키워드에는관로, test라고도 하는 프로그램 [이 될 수 있습니다. 그러나 나는 방금 who|cut|grep파이프를 사용했습니다. 종료 상태가 0이면 루프가 중지됩니다. 0이 아니면 루프가 계속됩니다.

또 다른 아주 사소한 변경 사항이 추가되었습니다 -q. 내 개인적인 의견으로는 이것이 /dev/null로 리디렉션하는 것과 동일한 결과를 얻는 더 좋은 방법입니다.

관련 정보