Está en la página 1de 3

Laboratorio Nº5

Código con errores – Scripts Shell


Prof. Antonio Cortés Castillo
antoniocortescastillo@gmail.com

Fecha de Entrega: antes del 27 de Julio 2020

Valor: 10 puntos , 2 puntos por script

Indicaciones: Usted va a tener a cargo la revisión y depuración de 5(cinco) Scripts, los cuales
van a realizar y ejecutar alguna acción en particular para resolver un aspecto o problema
específico. Los Scripts que estén correctos, simplemente los digita y los compila, genera su
respectiva salida por pantalla y explica en no más de 15 líneas ¿Qué es lo que hace el Script?.

En el caso, de que el Script, tenga errores, deben depurarlo y generar la salida por pantalla de
forma correcta y explicar que hace el Script. Cada Script, compilado correctamente, con su
correspondiente explicación y detalle, tendrá una ponderación de un 10% de la nota final de la
asignatura.

Las líneas que están en rojo, con la fuente en blanco, son las que tienen que depurar para que el
programa pueda correr, correctamente.

Los Script que a continuación se presenta, son los siguientes:

Script Nº 1.

El script testnum.sh solicita la entrada de un número y verifica su validez:

$ nl testnum.sh
1 #! /usr/bin/ksh

2 echo "Introduzca un número: \c


3 read num

4 case "$num" in

5 ?(+)+([0-9]) )
6 echo "$num es un número entero positivo"
7 ;;

8 ([0-9]) )
9 echo "$num es un número entero negativo"
10 ;;
11
12 ?(+)+([0-9])+([0-9]) )
13 echo "$num es un número real positivo"
14

15 -+([0-9]).+([0-9]) )
16 echo "$num es un número real negativo"
17 ;;

18 *)
19 echo "$num no es un número"
20 exit
21 ;;
22
23
24 exit 0
Script Nº 2.

El script suma.sh muestra por pantalla la suma de los números introducidos:


$ nl suma.sh
1 #! /usr/bin/ksh

2 suma=0
3 echo "Introduzca un número por línea, ˆd para mostrar a suma:"

4 while read num


5 do
6 # La verificación siguiente no es compatible
7 # con Bourne shell
8 if [[ "$num" ?([+-])+([0-9]) ]]
9 then
10 echo "El valor introducido no es un número"
11 continue
12 fi

13 # La sintaxis siguiente es equivalente a ((suma=suma+num))


14 # y a ((suma=$suma+$num))
15 # En Bourne Shell: suma=`expr $suma + $num`
16

17 done
18 echo "Suma: $suma"
19 exit 0

Script Nº 3.

Al usuario le gustaría asegurarse que en el momento que el archivo esperado aparece en el sistema de
archivos, éste presente en el disco en su totalidad (transferencia del archivo finalizada).

El siguiente, script espera.sh, va a verificar la presencia de un archivo testigo. El transmisor envía el

que si el archivo testigo está en el disco, entonces el archivo de datos ya se ha recibido completamente.

$ nl espera.sh
1 #!/bin/bash

2 # Verificación del número de argumentos


3 # Es necesario al menos 2 argumentos
4 if [[ $# -lt ]]
5 then
6 echo "Uso : $0 directorio archivo [ testigo ] "
7 exit 1
8 fi

9 # El 2º argumento tiene que ser un directorio


10 if [[ -d $1 ]]
11 then
12 echo "$1 no es un directorio"
13 exit 2
14 fi

15 # Nombre del archivo testigo por defecto : "testigo"


16 archTestigo=${3:-testigo}

17 # Los argumentos son correctos


18 # Hasta que llegue el archivo testigo, el script duerme 2 segundos
19 until [[ -e /$archTestigo ]]
20 do
21 sleep
22 done

23 # Si el archivo testigo ha llegado, el archivo de datos ha llegado también


24 # Por seguridad, se verifica
25 if [[ ! -e ]] ; then
26 echo "El archivo $archTestigo ha llegado pero el archivo de datos no existe"
27 exit 1
28 fi

29 # Tratamiento del archivo de datos


30 date=$(date ’+%d%m%y_%H%M’)
31 mv $1/$2 $HOME/$2.$date

32 mail $LOGNAME <<FIN


33 El archivo $HOME/$2.$date ha llegado.
34 FIN

35 echo "$0 : Usted ha recibido correo"


36 exit 0
Script Nº 4.

El script testarch.sh recibe una lista de nombres de archivo como argumento y da una indicación al
usuario sobre el tipo de archivo para cada elemento. La lista de valores se genera por substitución de
una variable ($*).

$ nl testarch.sh
1 #! /usr/bin/ksh

2 echo "Lista de los argumentos recibidos: \n$*"

3 for arch in # Equivalente a "for arch"


4 do
5 if [[ "$arch" ]]
6 then
7 echo "$arch es un archivo regular" 8
elif [[ "$arch" ]]
9 then
10 echo "$arch es un directorio"
11 elif [[ "$arch" ]]
12 then
13 echo "$arch no es ni un archivo regular ni un directorio"
14 else
15 echo "$arch no existe"
16 fi
17 done

Script Nº 5.

El script existe_usuario.sh recibe como argumento un nombre de usuario. El script muestra por
pantalla si el usuario existe o no en el sistema:

$ nl existe_usuario.sh
1 #! /bin/bash

2 if [[ $# 1 ]] ; then
3 echo "Número de argumentos incorrecto"
4 echo "Uso: nombre_usuario"
5 exit
6 fi

7 if -q "ˆ$1:" /etc/passwd
8 then
9 echo "El usuario existe en el sistema"
10 else
11 echo "El usuario no existe en el sistema"
12 fi

13 exit 0

Buena Suerte
¡Manos a la Obra!

También podría gustarte