Ayuda porfavor!!! Ejercicio Script

winlin está baneado por "Troll"
A ver si me pueden ayudar con este script de clase qe está dividido en dos partes. Gràcias

Un archivo de fechas de aniversario nombrado cumples.txt, tiene estos campos: el nombre de login del usuario, su nombre completo en la vida real, y la fecha, en formato dd-mm-aaaa (día, mes, año); los campos están separados por ":".

a) Escribir un script que reciba (que pida) el nombre de login de un usuario e imprima su nombre completo y fecha de aniversario|cumpleaños.

b) Escribir un script similar al anterior que reciba una fecha e imprima los nombres de login y nombres en la vida real de todos los usuarios que cumplen años este día.

Gracias
Sí te podemos ayudar: es fácil. Esperamos tus dudas.
Aquí no te vamos a hacer los deberes. Si tienes dudas, pregunta. Ni tan siquiera pones lo que llevas hecho, y el lenguaje lo vamos a tener que suponer.
winlin está baneado por "Troll"
pues hacer el script entero, hay dos, es que no tengo mucha idea de los scripts i es para el insti

tengo echo esto...
1a parte
#/bin/bash
#Pedir nombre de login i imprimir el su nombre completo y la fecha de aniversarip

echo -n Dame el login
read NOMBRE
cat | fgrep $NOMBRE cumples.txt | cut -d -f2,3

i la seguna parte ya no tengo ni idea
Bien, es una forma.

En el cut tienes que poner el delimitador (-d ':') y tendrás nombre_real:fecha. Puedes guardarla en una variable y, a partir de ahí, imprimir lo que te interesa.

TUVAR=$(comando)

La salida de comando se guardará en la variable $TUVAR. Cambia comando por tu fgrep...

A ver si sabes seguir.

Edito: Lo acabo de mirar, ¿qué pinta el cat ahí? No hace falta.

Edito: Ah, la segunda parte sólo tienes que leer el fichero línea a línea y ya hacer tus comparaciones y demás.
winlin está baneado por "Troll"
ok el cat quitado

como se hace una comparacion? un ejemplo plis
Comparación:

if [ ... == ... ]; then
   ...
else
   ...
fi


Leer fichero:

while read linea; do
   ...
done < fichero
Los dos ejercicios se hacer exactamente igual, así que si sabes hacer uno, deberías poder construir el otro. De todos modos, yo no usaría grep+cut, sino que echaría mano de awk que me permite filtrar. También sed, pero es más engorroso.

De hecho, un programa así ni siquiera necesita estar escrito en bash: se puede escribir directamente en awk

#!/usr/bin/awk -f

BEGIN { FS=":" }

$1 == USUARIO { print $2,$3 ; exit }


Listo. Se ejecuta así:

$ ./script1.awk -v USUARIO=fulano cumples.txt


Eso sí, la entrada de datos la estoy metiendo por la línea de comandos y no mediante ninguna pregunta, cosa a la que no sé si obliga el enunciado. En ese caso, también es fácil:

#!/usr/bin/awk -f

BEGIN {
   FS=":"
   print "Escriba el usuario"
   getline USUARIO < "/dev/stdin"
}

$1 == USUARIO { print $2,$3 ; exit }


¡Ah! El exit lo usa para salirme, porque el nombre de usuario es único, así que cuando he encontrado uno, dejo de seguir leyendo el fichero.

Lo equivalente en tu script sería añadirle a grep el parámetro -m1 (que no estaría de más que lo incluyeses).
7 respuestas