Linux/Unix Shell Scripting - Shell Script - comprueba usuarios

   
Vista:

Shell Script - comprueba usuarios

Publicado por sh0rty (3 intervenciones) el 26/11/2014 11:25:00
Buenas! estoy intentando haver un script que recibirá como único argumento el nombre de un fichero, que contendrá uno o más nombres de login (cada uno en una línea distinta). El script comprobará si cada uno de los nombres de login corresponde con usuarios locales del sistema. Si un nombre incluido en el fichero se corresponde con un usuario local, el script se limitará a mostrar el mensaje "<usuario> es un usuario local del sistema". En caso contrario mostrará el mensaje "<usuario> no es un usuario local del sistema".

Lo había enfocado de esta manera:

1
2
3
4
5
6
7
8
9
10
11
12
for i in $(cat "$1")
do
	for k in $(cat /etc/passwd | cut -d ":" -f1)
	do
 
		if [ "$i" = "$k" ]; then
			echo "$i es un usuario local del sistema."
#		else
#			echo "$i no es un usuario local del sistema."
		fi
	done
done

El problema reside en el "else" que me va a sacar una línea por cada línea del etc/passwd que comprueba y no coincida (solo necesito que cuando no exista me sake una línea diciendo que no existe). Y otra cosa que no entiendo muy bien, me veo forzado a poner = en la comparación del if ya que si pongo -eq me muestra un error diciendo que "se esperaba una expresión entera" y que yo sepa estoy comparando únicamente cadena con cadena...

¿Alguien tan amable de ayudarme?

Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Shell Script - comprueba usuarios

Publicado por sh0rty (3 intervenciones) el 26/11/2014 12:31:58
Ya tengo la solución... era mas simple del enfoque que le estaba dando, solo había que buscar la opción correcta para usar el grep.

1
2
3
4
5
6
7
8
for i in $(cat "$1")
do
	if [ $(grep -c "$i" /etc/passwd) -gt 0 ]; then
		echo "$i es un usuario local del sistema."
	else
		echo "$i no es un usuario local del sistema."
	fi
done
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Shell Script - comprueba usuarios

Publicado por Tom (254 intervenciones) el 26/11/2014 15:25:33
Si el fichero es grande, tu sesión de shell petará.

FLIST="$1"

while read USER
do
...
... grep $USER /etc/passwd ...
...
done < $FLIST
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Shell Script - comprueba usuarios

Publicado por caic (82 intervenciones) el 27/11/2014 12:11:26
Hola,

La opción de un solo for no es del todo correcta. Si existiera un usuario de sistema “Usuario10” y tu fichero contuviera el usuario “Usuario1” obtendrías un falso positivo.

Yo seguiría con la opción de los dos for pero añadiendo una variable de control. Algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for i in $(cat "$1")
do
        EXISTE=0
 
	for k in $(cat /etc/passwd | cut -d ":" -f1)
	do
		if [ "$i" = "$k" ]; then
                    EXISTE=1
		fi
	done
 
        if [ $EXISTE -eq 1 ]; then
            echo "$i es un usuario local del sistema."
        else
            echo "$i no es un usuario local del sistema."
        fi
done


NOTA: código no probado!!

Saludos!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Shell Script - comprueba usuarios

Publicado por Tom (254 intervenciones) el 27/11/2014 21:10:01
El problema de "Usuario1" con "Usuario10" se puede solucionar añadiendo la opción -w al grep ...
:)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Shell Script - comprueba usuarios

Publicado por caic (82 intervenciones) el 01/12/2014 09:12:23
No conocía ese flag. Acabo de revisarlo en el man y está genial.

Gracias! :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar