저는 서버에서 현재 사용자를 검색하기 위해 사용자 입력을 수락해야 하는 과제를 수행 중입니다. 사용자 입력이 온라인인 경우 사용자 이름을 출력해야 합니다. 사용자가 로그인하지 않은 경우 이에 따라 응답해야 합니다. 며칠 동안 이 코드를 작업해 왔지만 알아낼 수 없는 것 같습니다. 사용자를 검색할 수 있지만 사용자 입력 변수 문자열을 로그인된 사용자 이름이 포함된 변수 문자열과 비교할 때 매개변수가 너무 많다는 오류가 계속 발생합니다. 아래 내 코드를 참조하십시오.
#!/bin/bash
read -p "Please enter the user name you would like to search: " userName
name=$(who | grep "${userName}" | awk '{print $1}');
if [ [ $name == *"$userName"* ] ];
then
echo $name
else
printf "That user is not logged in.\n";
fi
답변1
당신은 꽤 가깝지만 주요 문제는 bash [[ ]]
구성이 대괄호 사이에 공백을 가질 수 없다는 것입니다. 여러 [
명령, 즉 POSIX 명령을 실행하려고 한다고 생각합니다 test
. 수정하면 작동하지만 사용자가 여러 개의 tty를 열어 둔 경우 각 tty에 대해 해당 이름이 한 번씩 인쇄됩니다. 를 사용하려면 grep
다음과 같이 하세요.
#!/bin/bash
read -p "Please enter the user name you would like to search: " userName
if who | awk '{print $1}' | grep -wq "$userName"
then
echo "$userName is logged in."
else
echo "That user is not logged in.";
fi
exit