Está en la página 1de 8

1 8 Conceptos Fundamentales sobre UNIX 2.0-Laboratorio 15.2.8 Copyright 2002, Cisco Systems, Inc.

Conceptos Fundamentales sobre UNIX


Laboratorio 15.2.8 Escritura de Scripts de Shell
(Tiempo estimado: 60 min.)

Objetivos:

Escribir y ejecutar un script de shell simple
Escribir, ejecutar y hacer debug de un script de shell ms avanzado

Trasfondo:
En este laboratorio, el alumno escribir, ejecutar y har debug de s cripts de shell simples y ms
complejos. Los scripts de shell bsicos son pequeos archivos que consisten en varios comandos
UNIX que muestran informacin bsica del s istema o manipulan archivos. Scripts de shell ms
complejos consisten en var iables y comandos de pr ogramacin incorporados que incluyen al
comando read para una entr ada interactiva, los comandos condicionales if, test y case y l os
comandos de bucle for, while y until.

No es un requisito que el usuario escriba scripts de s hell para utilizar o administrar un s istema
UNIX. No obstante, cuanto ms se utiliza UNIX, ms encontrar el usuario instancias en las cuales
una tarea llevada a c abo reiteradamente no tiene un nic o comando UNIX. Escribir un script de
shell es una forma de crear un comando personalizado que puede llevar a cabo una nica tarea o
una serie de tareas y puede utilizarse reiteradamente.

Herramientas / Preparacin:
a) Antes de inic iar este laboratorio, el alum no deber repasar el Captulo 15
Introduccin a los Scripts de Shell.
b) El alumno necesitar lo siguiente:
1. Una ID de login de us uario, por ejemplo user2 y contrasea asignadas por el
instructor.
2. Una computadora que funcione con el sistema operativo UNIX.
3. Computadoras en red en el aula con el sistema de archivos de la clase instalado.

Notas:
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________














2 8 Conceptos Fundamentales sobre UNIX 2.0-Laboratorio 15.2.8 Copyright 2002, Cisco Systems, Inc.

Utilice el diagrama del rbol de directorios del sistema de Archivos de la Clase para que lo
asista en este laboratorio.

Estructura del rbol de Archivos de la Clase

Paso 1. Hacer login al CDE.
Haga login con el nombre de usuario y la contrasea que le f ueron asignados por su instructor en el
recuadro de entradas del CDE.

Paso 2. Acceder a la Lnea de Comandos.
Haga clic con el botn der echo en el f ondo del es pacio de tr abajo y haga clic en Tools
(Herramientas). Seleccione Terminal desde el men para abrir una ventana de terminal.

Paso 3. Scripts de shell simples.
Un alias se utiliza normalmente para ejecutar uno o ms comandos simples separados por punto y
coma (;). Un script de shell es un archivo de texto que contiene una secuencia de comandos para
que el shell ejecute una lnea a la vez. Tareas complejas que involucran variables y otras funciones
de programacin se logran utilizando scripts de shell.

Los siguientes son los pasos generales para crear un script de shell:

Decidir qu har el script
Hacer una lista de comandos
Crear un nuevo archivo para el script
Identificar el shell que utilizar el script
Agregar comandos y comentarios
Guardar el archivo script
Hacer ejecutable el archivo script
Tipear el nombre del script para ejecutarlo
Hacer debug y modificar el script si tienen lugar errores

a. Al nombrar un ar chivo script el alum no deber evitar utilizar el nombre de un
_______alias_________________ o un ______comando_______________.
b. Normalmente, los archivos script terminan con _____.sh_______________________.
c. Normalmente, en qu directorio se ubican los scripts de shell creados por el usuario?
_________~/bin______________________

3 8 Conceptos Fundamentales sobre UNIX 2.0-Laboratorio 15.2.8 Copyright 2002, Cisco Systems, Inc.

d. Qu carcter se utiliza antes de un c omentario en un archivo script?
____#_________
e. Qu se agrega al script que le dice al sistema qu shell utilizar al interpretar las lneas
del script? __#!bin/ksh o #!bin/bash____ Dnde se ubica esta lnea en el
archivo script? __en la primera lnea_____
f. Cul es el resultado de echo date? ___Aparece la palabra date__
g. Cul es el resultado de echo `date`?El resultado del comando date (fecha y hora actual)
h. Cul es el resultado de echo $LOGNAME? _El texto $LOGNAME_
i. Cul es el resultado de echo $LOGNAME? _El nombre del usuario logueado_

Paso 4. Ejecutar el script.
Los scripts de shell s iempre se ejecutan en un shell separ ado. Si un script de shell se ejecuta desde el shell de una
ventana de terminal, se inicia un subshell para ejecutarlo.

Siempre hay dos formas de ejecutar un script de shell. Un usuario puede utilizar el comando ksh o
bash seguido del nombre del archivo script. Un usuario tambin puede hacer del archivo de script de shell
un archivo ejecutable tipeando el nombre del script para ejecutarlo.

a. Qu tipeara el alum no para ejecutar el s cript llamado whoison.sh? El ar chivo
whoison.sh no tiene permiso de ejecucin. __bash whoison.sh________________
b. El archivo whoison.sh tiene los permisos r w -r - - r- -. Tipee el comando para otorgar
los permisos r w x r - x r - - al archivo. __chmod 754 whoison.sh___________
c. El archivo script ejecutable whoison.sh se encuentra en el dir ectorio ~/bin. Cuando el
alumno tipea el ar chivo whoison.sh para ejecutarlo, el s hell muestra el mensaje
command not found (no se encontr el comando). Cul es el problema?
_El directorio /bin no se encuentra en el PATH______


Paso 5. Hacer debug del script.
Un problema comn al escribir scripts de shell es que el s hell no inter preta el comando como lo
espera el usuario.


Un usuario puede utilizar el comando ksh o bash con las opciones x (echo) y v (verbose) para
ayudar a identif icar en qu par te del s cript se encuentran los problemas. La opc in x muestra
cada lnea despus de haber sido interpretada por el shell y coloca un signo ms (+) despus de haber
ejecutado cada lnea. La opc in v es s imilar a la opcin x excepto en que muestra
los comandos antes de
efectuar la sustitucin de variables y comandos.


a. Qu lnea de comandos se introdujo para generar el s iguiente resultado desde el
archivo script whoison.sh? _bash -xv whoison.sh____


echo Hello $LOGNAME!
+ echo Hello user10!
Hello user10!
echo The number of users logged on is: `who | wc l`
who | wc l
+ echo The number of users logged on is: 3
The number of users logged on is: 3
echo Todays date is: `date`
date
+ echo Todays date is: Fri Jun 21 2002
Todays date is: Fri Jun 21 2002










4 8 Conceptos Fundamentales sobre UNIX 2.0-Laboratorio 15.2.8 Copyright 2002, Cisco Systems, Inc.


Paso 6. Crear, ejecutar y hacer debug de un script de shell simple.

a. Cree un script llamado firstscript.sh en el dir ectorio home del us uario que haga lo
siguiente:
1. Especificar qu shell utiliza el script para interpretar los comandos de script.
2. Describir el propsito del script, que es mostrar los usuarios e imprimir la fecha
y el calendario actual.
3. Mostrar en la pantalla The number of users logged on is : (La cantidad de
usuarios loggeados es:) seguido del resultado correcto.
4. Mostrar en la pantalla Todays date is: (La fecha de hoy es:) seguido del
resultado correcto.
5. Mostrar en la pantalla Below is the current months calendar (A continuacin
se muestra el calendario del mes en curso) seguido del resultado correcto.
b. Cree un directorio bin en el dir ectorio home del alumno, preparndose para el prximo
archivo script del alumno.
c. Modifique la var iable PATH en .pr ofile o .bas h_profile para que el dir ectorio bin que
acaba de c rearse en el dir ectorio home del alum no se encuentre en la r uta de
bsqueda.
d. Cree otro script llamado info.sh en el dir ectorio ~/bin. El script deber contener
comentarios y hacer lo siguiente cuando se lo ejecute:
1. Declarar que el script ha de ejecutarse en los shells Korn o Bash.
2. Despejar la pantalla.
3. Saludar a la persona que se logge.
4. Mostrar el nombre de host (uname n).
5. Mostrar la fecha actual.
6. Mostrar el calendario del mes en curso.
7. Mostrar el directorio de trabajo actual.
8. Mostrar el contenido del directorio actual.
9. Mostrar una lista de los procesos que se ejecutan en el shell actual.
10. Imprimir en grandes letras Have a Nice Day (Que tenga un buen da).
e. Ejecute el script info.sh iniciando primero un shell Korn. Luego, hgalo ejecutable para
el propietario del archivo y para cualquiera que se encuentre en el mismo grupo.
f. Ejecute el script utilizando ksh x, ksh v y ksh xv para hacer debug del mismo.

Paso 7. Scripts complejos utilizando programacin del shell.
Incorporado a c ada shell UNIX hay un lenguaj e de pr ogramacin completo que consiste en
comandos y construcciones que pueden utiliz arse para crear scripts ms complejos ms all de
simplemente hacer una lista de una serie de comandos.

Adems de contener comandos de programacin del shell tales como if, else, read, case, while y
exit, los scripts complejos utilizan variables predefinidas y definidas por el usuario.

Variables
Una variable es un plac eholder o m arcador de pos icin para la inf ormacin requerida por los
procesos para que puedan funcionar de manera apropiada. Una variable tiene un nombre y retiene
un valor. Cambiar el valor de una variable se denomina configurar la variable. Existen dos tipos de
variables utilizadas en los scripts de shell, las variables del shell y las variables del entorno.

Las variables del shell son mantenidas por el shell y slo son conocidas por el shell actual. Estas
variables son variables locales y pueden visualizarse por medio del comando set. Las variables
del entorno son variables conocidas por el shell actual y todos los shells hijos o subshells.

Las variables del entorno pueden mostrarse por medio del comando env.


5 8 Conceptos Fundamentales sobre UNIX 2.0-Laboratorio 15.2.8 Copyright 2002, Cisco Systems, Inc.
Las variables locales se configuran utilizando el f ormato VARIABLE=valor. Por ejemplo,
BACKUPDIR=/home/user2/myfiles configura la variable llamada BACKUPDIR (backup directory
directorio de respaldo), que es igual al valor de /home/user2/myfiles. Los nombres de las variables
van en maysculas por convencin pero pueden ir en minsculas. Utilice el comando echo para
mostrar el valor de una variable.

Parmetros posicionales
Los parmetros posicionales son variables del s hell especiales incorporadas que pueden
proporcionar el nombre del ar chivo script o ar gumentos al s cript a medida que se ejecuta. Sus
valores se toman de argumentos de la lnea de comandos.

Parmetro Propsito y ejemplo
$0 Comando o nombre del script
echo The name of the script file is $0
$1 - $9 Nmero de argumento de la lnea de comandos
echo The first argument is: $1
$* Todos los argumentos introducidos en la lnea de
comandos
echo The args specified on the command line = $*
$# Cantidad de argumentos introducidos en la lnea de
comandos
echo The number of args on the command line = $#

Entradas interactivas
Para hacer ms flexible y amigable con el usuario a un script de shell, el alumno puede hacer que
el script haga una pausa y pida una nic a lnea de entr ada. Esto se logra por medio del comando
echo para pedir entradas al alumno y del comando read para hacer una pausa y recibir entradas
del teclado. Lo que s ea que intr oduzca el alum no se almacena en el nombre de la variable
especificada despus del c omando read. Las entradas interactivas son una funcionalidad muy
potente de los scripts de shell.

echo Enter your name: \c #Prompt the user for name
read name #Read from keyboard and save input in the name variable

(echo Introduzca su nombre: \c #Pedir el nombre del usuario
read name #Leer desde el teclado y guardar la entrada en la variable name)

a. Cree un s cript llamado whoison.sh en el dir ectorio ~/bin que aceptar un nombre de
usuario como argumento, y luego muestra todas las lneas del resultado del comando
who que contiene informacin acerca del us uario especificado. Especficamente, el
script har lo siguiente:
1. Especificar qu shell utiliza el script para interpretar los comandos del script.
2. Leer el primer argumento especificado cuando se ejecuta el script y asignarlo a
la variable llamada user.
3. Mostrar todas las lneas del r esultado del comando who que c ontiene
informacin acerca del usuario especificado.
b. Cree y luego ej ecute el script grepfor.sh que se muestra a continuacin. Utilice root
para el patrn y /etc/passwd como archivo a bus car la pr imera vez que el alum no
ejecuta el script.
#!/bin/ksh
# grepfor.sh prompts for a pattern and a file then generates output
echo Enter the pattern to search for: \c or echo -e Enter the pattern to search for:
\c (bash)
read pattern
echo Enter the filename to search: \c or echo -e Enter the filename to search: \c
(bash)

6 8 Conceptos Fundamentales sobre UNIX 2.0-Laboratorio 15.2.8 Copyright 2002, Cisco Systems, Inc.
read filename
echo
echo Results:
grep $pattern $filename
c. Modifique el script para que cuando el alumno lo ej ecute y especifique user para el
patrn y /etc/passwd para el ar chivo el r esultado sea la c antidad de c uentas del
usuario del ar chivo password que tengan user en el nombre. Qu ha cambiado?
______________________________

Paso 8. Scripts complejos que utilizan los comandos if, test y case.
Para ser til, un pr ograma debe poder probar condiciones y tomar decisiones. El programa debe
poder examinar el resultado de un comando y elegir entre dos o ms cursos de accin. La prueba
ms simple es determinar si una c ondicin es verdadera o f alsa. Si la c ondicin es verdadera,
ejecute cualquier cantidad de comandos subsecuentes. Si la c ondicin no es verdadera, contine
con el script.

Los comandos que llevan a c abo algunas tareas basndose en si una condicin tiene xito o f alla
se denominan comandos condicionales. Los tres comandos condicionales ms frecuentemente
utilizados son if, test y case.

El Formato del Comando if-then:
if (si) el comando tiene xito
then (entonces)
ejecutar comando o comandos fi
El Formato del Comando if-then-elif (else if):
if el comando tiene xito
then
ejecutar comando o comandos
elif el comando tiene xito
then
ejecutar comando o comandos
else (de lo contrario)
ejecutar comando o comandos
fi
El Formato del Comando if-then-else:

if el comando tiene xito
then
ejecutar comando o comandos
else
ejecutar comando o comandos
fi
El comando condicional incorporado al shell
test se utiliza a menudo para probar una o
ms condiciones a continuacin del comando
if.
El Formato del Comando if-test:
if test expresin o if [ expresin ]
then
ejecutar comando o comandos
fi
El comando del shell incorporado case se utiliza
cuando hay muchas condiciones que probar.
Formato del comando:
case value in
value1)
Comando
Comando
;;
*)
Comando
;;
esac

El valor de una variable de caso se compara
con valor1, valor2, etc., hasta que coincida.



7 8 Conceptos Fundamentales sobre UNIX 2.0-Laboratorio 15.2.8 Copyright 2002, Cisco Systems, Inc.
a. Modifique el s cript whoison2.sh del dir ectorio ~/bin para que acepte un nombre de
usuario como argumento y si el us uario est loggeado, muestre <specified user> is
currently logged on (<el usuario especificado> est loggeado actualmente).
b. Cree un script test1.sh en ~/bin que contenga las siguientes lneas:
#!/bin/ksh
# test1.sh script to demonstrate the test command
echo Do you want a long listing of the files in the current
directory?
echo enter y for Yes or n for No:\c
c. Modifique el script test1.sh para que:
Lea la respuesta dada por el us uario que ej ecuta el s cript en una var iable
llamada answer.
Pruebe la r espuesta introducida por el us uario que ejecuta el script. Si la
respuesta es y, despeje la pantalla y ejecute un listado largo. De otro modo,
si la respuesta es n, ejecute ls sin ninguna opcin. Qu lneas que restan se
agregaron al archivo script para satisfacer los requisitos a y b?

Paso 9. Scripts complejos que utilizan control de flujo (bucles).
El alumno puede utilizar bucles para controlar el flujo de ejecucin de un script. Un bucle repite una
secuencia de instrucciones reiteradamente hasta satisfacer una condicin predeterminada.

A menudo un script tiene que ver con llevar a cabo la misma operacin o conjunto de operaciones
en cada archivo de un dir ectorio o lista, cada lnea de un archivo, o cada palabra de una lnea. El
shell proporciona tres construcciones de buc les para lograr este tipo de accin: el bucle for, el
bucle while, y el bucle until.

El bucle for
El bucle for ejecuta una lista de comandos una
vez por cada valor de una variable de bucle.
Formato del Comando:
for variable in list
do
Comandos
done
El bucle while
El bucle while ejecuta reiteradamente un grupo
de comandos dentro del cuerpo del bucle hasta
que la condicin de prueba en la expresin se
vuelve falsa. En otras palabras, mientras la
expresin es verdadera, ejecute estos
comandos.
Formato del Comando:
while comando
do
Comandos
done
El bucle until
El bucle until es muy similar al bucle while pero
ejecuta una serie de comandos mientras un
comando contina fallando, estado de salida no
igual a cero. Cuando el comando finalmente se
ejecuta exitosamente, el bucle se termina y la
ejecucin pasa al primer enunciado que sigue a
la construccin done. La condicin until se
verifica en la parte superior del bucle, no en la
inferior.
Formato del Comando:
until comando
do
Comandos
done





8 8 Conceptos Fundamentales sobre UNIX 2.0-Laboratorio 15.2.8 Copyright 2002, Cisco Systems, Inc.
a. Qu hace el siguiente script de bucle for cuando se lo ejecuta?
#!/bin/bash
for FILE in file*
do
ls -l $FILE
done
echo all done!
b. Cree y luego ejecute el script de shell que figura arriba y nmbrelo loop1.sh. Colquelo
en ~/bin.
c. Modifique el s cript loop1.sh para que muestre un lis tado largo de todos los archivos
introducidos en la lnea de c omandos. Por ejemplo $ loop1.sh file1 file2 o $ loop1.sh
file*, en lugar de aqullos especificados en el script, como arriba.
d. Cree un script llamado loop2.sh y colquelo en ~/bin. El s cript utilizar el bucle until. Al
ejecutarse, el script verificar para ver si un usuario, especificado como argumento del
script, est loggeado. Si el us uario especificado no est actualmente loggeado, el
script mostrar el m ensaje <specified user> is not logged on (<el usuario
especificado> no est loggeado) y dormir durante cinco segundos antes de intentar
nuevamente. Una vez que el usuario especificado se loggea, el s cript mostrar el
mensaje <specified user> is logged on.
e. Pruebe el script loop2.sh en una ventana de ter minal utilizando el nombre de usuario
del alumno como argumento para el s cript. Por ejemplo, $ loop2.s h user1. Qu
mostr el script? ___________________________
f. Ejecute nuevamente el script utilizando un nombre de usuario diferente. El nombre de
usuario debe f igurar en la lis ta del archivo /etc/password. Por ejemplo, $ loop2.sh
user5. Qu mostr el script? ________________________
g. Deje el script en ej ecucin y abra otra ventana de ter minal. Utilizando la utilidad telnet,
el alumno deber loggearse a s u propio sistema. Utilice $ telnet <nombre de host o
direccin ip del alumno> para loggearse con el nombre de usuario especificado como
argumento del script del alumno. En este ejemplo sera user5. Qu mostr el script
que se ejecuta en la primera ventana de terminal? ____________________________
h. Cree un nuevo script llamado counter1.sh y colquelo en el directorio ~/bin. Introduzca
las siguientes lneas de este script de bucle while:
#!/bin/ksh
# counts from 1 to 5 then displays I can count!
#
num=0 #initialize the count variable
while [ $num -lt 6 ] #loop while $num is less than 6
do
echonumber: $num
num=`expr $num + 1` #increment count by one
done
echo I can count !
i. Ejecute el s cript, haga debug de s er necesario. Cont el s cript de uno a cinco?
_________ Qu debe cambiarse en el script para que cuente de uno a cinco?
______________________________________________________________

Paso 10. Cerrar la ventana de terminal y hacer logout.
Haga doble clic en el botn de r aya del extremo superior izquierdo de la pantalla, luego haga c lic
en el cono EXIT (SALIDA) del panel frontal.