Búsqueda de entrada de usuario de Bash para saber quién está en el servidor si hay un error en la declaración Demasiados argumentos

Búsqueda de entrada de usuario de Bash para saber quién está en el servidor si hay un error en la declaración Demasiados argumentos

Estoy trabajando en una tarea que requiere que acepte la entrada del usuario para buscar usuarios actuales en el servidor y si la entrada del usuario está en línea, necesito mostrar el nombre del usuario. Si el usuario no ha iniciado sesión, debo responder en consecuencia. He estado trabajando en este código durante días y parece que no puedo entenderlo. Puedo buscar al usuario, pero cuando se trata de comparar la cadena de variables de entrada de mi usuario con la cadena de variables que contiene el nombre de los usuarios que han iniciado sesión, sigo recibiendo un error que dice demasiados argumentos. Por favor vea mi código abajo:

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

Respuesta1

Estás cerca, pero el principal problema es que la [[ ]]construcción bash no puede tener espacios entre corchetes. Parece que estás intentando ejecutar varios comandos, que es el comando [POSIX . testSi soluciona eso, funciona, pero si el usuario tiene varios ttys abiertos, imprimirá su nombre una vez para cada uno. Si quieres usar grep, puedes hacer esto:

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

información relacionada