Linux/Unix Shell Scripting - Ayuda con estos ejercicios.

 
Vista:
sin imagen de perfil

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
Val: 104
Oro
Ha mantenido su posición en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

Ayuda con estos ejercicios.

Publicado por xve (309 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
sin imagen de perfil

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
Val: 104
Oro
Ha mantenido su posición en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

Ayuda con estos ejercicios.

Publicado por xve (309 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
sin imagen de perfil

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

Ayuda con estos ejercicios.

Publicado por Diego (1 intervención) el 13/03/2023 18:44:48
Todas las soluciones que habeis propuesto me salen con el mismo error: "Demasiados argumentos"
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 ElvinoFalta
Val: 3
Ha aumentado su posición en 4 puestos en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

Ayuda con estos ejercicios.

Publicado por ElvinoFalta (7 intervenciones) el 17/03/2023 15:23:13
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/ksh
#############################################################################################################
#  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
#############################################################################################################
USERS=`cut -d: -f 1,3,6 /etc/passwd | awk -F: '{if($2>=500) print $1}'`
export SALIR=1
while [[ $SALIR -ne 0 ]]
do
     export HORA=`date +'%H'`
     export MINU=`date +'%M'`
     # export Fechita=`date +'%Y%m%d_%H%M%S'`
     for FU in $USERS
     do
          if [[ $HORA -ge 10 && $HORA -le 12 ]]
	     then
             if [[ $MINU -ge 0 && $MINU -le 59 ]]
	     then
                 echo "Buenos dias, $FU"
             fi
          fi
          if [[ $HORA -ge 13 && $HORA -le 19 ]]
	     then
             if [[ $MINU -ge 0 && $MINU -le 59 ]]
	         then
                 echo "Buenos tardes, $FU"
             fi
          fi
          if [[ $HORA -ge 20 && $HORA -le 04 ]]
	     then
             if [[ $MINU -ge 0 && $MINU -le 59 ]]
	         then
                 echo "Buenos noches, $FU"
             fi
          fi
     done
     sleep 5
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