서버에 있는 Bash 사용자 입력 검색 If 문 오류 매개변수가 너무 많습니다.

서버에 있는 Bash 사용자 입력 검색 If 문 오류 매개변수가 너무 많습니다.

저는 서버에서 현재 사용자를 검색하기 위해 사용자 입력을 수락해야 하는 과제를 수행 중입니다. 사용자 입력이 온라인인 경우 사용자 이름을 출력해야 합니다. 사용자가 로그인하지 않은 경우 이에 따라 응답해야 합니다. 며칠 동안 이 코드를 작업해 왔지만 알아낼 수 없는 것 같습니다. 사용자를 검색할 수 있지만 사용자 입력 변수 문자열을 로그인된 사용자 이름이 포함된 변수 문자열과 비교할 때 매개변수가 너무 많다는 오류가 계속 발생합니다. 아래 내 코드를 참조하십시오.

#!/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

관련 정보