Pesquisa de entrada do usuário Bash para quem está no servidor se erro de instrução Muitos argumentos

Pesquisa de entrada do usuário Bash para quem está no servidor se erro de instrução Muitos argumentos

Estou trabalhando em uma tarefa que exige que eu aceite a entrada do usuário para pesquisar os usuários atuais no servidor e, se a entrada do usuário estiver online, preciso gerar o nome do usuário. Se o usuário não estiver logado, preciso responder adequadamente. Estou trabalhando nesse código há dias e não consigo descobrir. Posso procurar o usuário, mas quando se trata de comparar a string da variável de entrada do usuário com a string da variável que contém o nome do usuário que está logado, continuo recebendo um erro que indica muitos argumentos. Por favor, veja meu código abaixo:

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

Responder1

Você está perto, mas o principal problema é que a [[ ]]construção do bash não pode ter espaços entre colchetes. Acho que você está tentando executar vários [comandos, que é o testcomando POSIX. Se você consertar isso funciona, mas se o usuário tiver vários ttys abertos, imprimirá seu nome uma vez para cada um. Se você quiser usar grep, você pode fazer isso:

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

informação relacionada