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
-c
significa 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 $uzer
no 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