bash: lectura de la variable de usuario en el script grep de bash

bash: lectura de la variable de usuario en el script grep de bash

Probé todas las combinaciones posibles para que este script bash funcione. Es parte de un script más grande y básicamente solicita un nombre de usuario (para verificar si existe) y devuelve la respuesta adecuada:

#! /bin/bash
# Script to see if User exists

clear
echo -n "Enter user to check: "
read $uzer

grep -c '^${uzer}:' /etc/passwd

if [ $? -eq 0 ]; then
  echo "User does exist :)"
else
  echo "No such user"
fi

En la terminal lo siguiente funciona bien:

grep -c '^devuser1:' /etc/passwd
RETURNS: 1
grep -c '^devuser1234:' /etc/passwd
RETURNS: 0

Probé muchas combinaciones para pasar la variable de lectura '^${uzer}:'sin alegría. ¿Alguna idea de qué más puedo probar?

Respuesta1

-csignifica que desea saber la cantidad de veces que este usuario está en /etc/passwd, mientras que $?es el código de salida. Esas son diferentes, ya que la cantidad de veces se imprime en la salida estándar. Úselo $()para convertir la salida estándar en una variable

Segundo problema: todas sus variables, como $uzerno serán sustituidas por sus valores cuando estén entre comillas simples. Utilice comillas dobles.

number=$(grep -c "^${uzer}:" /etc/passwd)
if [ $number -gt 0 ]; then
  echo "User does exist :)"
else
  echo "No such user"
fi

Respuesta2

Necesitas grep -q. Si no distingue entre más códigos de salida que "0" y "otro", no es necesario separar grep y si:

if grep -q "^${uzer}:" /etc/passwd; then
  echo "User does exist :)"
else
  echo "No such user"
fi

información relacionada