
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 test
comando 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