Gracias por la respuesta daryo. Ya me ha funcionado, así lo tenía yo antes escrito, pero estoy buscando otra posible solución ¿Sabéis como hacerlo de otra manera?
una forma seria que si la variable usuario esta vacia entonces no muestras nada
if [ -n "$usuario" ];then
echo el usuario existe
else
echo el usuario no existe
fi
otra alternativa con el incomprensible awk
#!/bin/bash
while read linea
do
echo $linea | awk -v r=$1 'BEGIN{FS=":";}{if($1==r){print "usuario: "$1"\nuid: "$3"\ngrupo: "$4"\nshell: "$7;}}'
done < /etc/passwd
voy recorriendo cada linea y se guarda en la varaible linea
dentro de awk que es en si otro lenguaje de programacion le digo que separe los elementos con el simbolo :
BEGIN{FS=":";}
le digo que dentro de awk "r" va a ser la variable que nos envio el usuario
hago un if si el usuario $1 (el que esta en passwd ) es igual a el usuario que estoy buscando "r" que que lo muestre
if($1==r)
{
print "usuario: "$1"\n uid: "$3"\n grupo: "$4"\n shell: "$7
}
algo exagerado pero si quisiera que me saliera "no existe el usuario"
#!/bin/bash
while read linea
do
var=$(echo $linea | awk -v r=$1 'BEGIN{FS=":";}{if($1==r){print "usuario: "$1"\nuid: "$3"\ngrupo: "$4"\nshell: "$7;}}' )
if [ -n "$var" ];then
break
fi
done < /etc/passwd
if [ -n "$var" ];then
echo $var
else
echo "no existe el usuario"
fi