Linux/Unix Shell Scripting - Ayuda con estos ejercicios.

   
Vista:

Ayuda con estos ejercicios.

Publicado por Tomas (13 intervenciones) el 23/02/2014 10:34:35
Hola, tengo que hacer estos script, y no se ni como comenzar:

Escribir un programa saludo.sh que, según la hora, escriba el saludo correspondiente al nombre de pila del usuario. En el archivo /etc/passwd los usuarios deben estar ingresados con nombre y apellido separados por blanco. Los saludos corresponden a las siguientes horas: Buenos días, de 05:00 hasta 12:59; Buenas tardes, de 13:00 hasta 19:59; Buenas noches 20:00 hasta 04:59. Ejemplo de mensaje: Buenos días, Juan.
Para empezar se recomienda probar con solo 2 horas (mañana y tarde) y el nombre de login como parámetros
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
Imágen de perfil de xve

Ayuda con estos ejercicios.

Publicado por xve (254 intervenciones) el 23/02/2014 18:13:46
Hola Tomas, aquí lo tienes... no entiendo muy bien lo del nombre, eso te lo dejo a ti:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash
 
# obtiene los usuarios con id igual o superior a 500
usuarios=`cut -d: -f 1,3,6 /etc/passwd | awk -F: '{if($2>=500) print $1}'`
# obtenemos la hora
hora=`date +%H`
 
# recorremos todos los usuarios
for usuario in $usuarios
do
    if [ $hora -ge 5 -a $hora -lt 13 ];then
        echo "Buenos dias $usuario"
    elif [ $hora -ge 13 -a $hora -lt 20 ];then
        echo "Buenas tardes $usuario"
    elif [ $hora -ge 20 -o $hora -lt 5 ];then
        echo "Buenas noches $usuario"
    fi
done

Coméntanos si te sirve, ok?
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

Ayuda con estos ejercicios.

Publicado por Tomas (13 intervenciones) el 24/02/2014 16:01:42
No funciona. He intentado hacerlo mas simple, pero me dice: numero excesivo de parámetros. en los if y elif. Que es lo que pasa?


1
2
3
4
5
6
7
8
9
10
11
hora='date +H'
 
if [ $hora -ge 5 -a $hora -lt 13 ] ;then
echo "Buenos dias "
elif [ $hora -ge 13 -a $hora -lt 20 ] ;then
echo "Buenas tardes "
elif [ $hora -ge 20 -a $hora -lt 5 ] ;then
echo "Buenas noches "
fi
 
exit
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
Imágen de perfil de xve

Ayuda con estos ejercicios.

Publicado por xve (254 intervenciones) el 24/02/2014 18:12:17
Tomas, fíjate en las comillas de hora='date +H'... son erróneas... mira las que yo te puse: hora=`date +%H`
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

Ayuda con estos ejercicios.

Publicado por Alejandro (2 intervenciones) el 11/03/2014 11:32:42
No se si será un poco tarde, pero yo lo tengo hecho así, y a mí me funciona de esta manera.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/sh
 
if test $# -ne 0 
then
	echo "El número de parámetros es incorrecto"
	echo "USO: Saludo"
	exit -1
else
	#Obtenemos la hora (sirve para determinar la franja horaria)
	hora=$(uptime | cut -d : -f 1)
 
	#Ahora imprimimos el mensaje en función de la hora
	if test "$hora" -ge 5 -a $hora -lt 13
	then
		echo "Buenos días $USER"
		exit 0
 
	elif test "$hora" -ge 13 -a $hora -lt 20
	then
		echo "Buenas tardes $USER"
		exit 0
 
	elif test "$hora" -ge 20 -a $hora -lt 24
	then
		echo "Buenas noches $USER"
		exit 0
 
	elif test "$hora" -ge 0 -a $hora -lt 5
	then
		echo "Buenas noches $USER"
		exit 0
	fi
fi
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