Pesquisa de entrada do usuário bash para quem está no servidor se houver erro de instrução muitos argumentos

0

Estou trabalhando em uma tarefa que exige que eu aceite a entrada do usuário para procurar usuários atuais no servidor e, se a entrada do usuário estiver on-line, preciso exibir o nome do usuário. Se o usuário não estiver logado, preciso responder de acordo. Eu tenho trabalhado neste código por dias e não consigo descobrir. Eu posso procurar o usuário, mas quando se trata de comparar a minha variável de entrada de usuário com a variável que contém o nome de usuário que está logado, eu continuo recebendo um erro que diz 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
    
por codenewbie503 30.11.2017 / 11:20

1 resposta

0

Você está próximo, mas o problema principal é que a construção bash [[ ]] não pode ter espaços entre os colchetes. Acho que você está tentando fazer vários comandos [ , que é o comando POSIX test . Se você consertar que funciona, mas se o usuário tiver múltiplos ttys open, ele irá 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
    
por 01.12.2017 / 17:46