Sei sulla pagina 1di 8

Conceptos Fundamentales sobre UNX

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 scripts de shell simples y ms
complejos. Los scripts de shell bsicos son pequeos archivos que consisten en varios comandos
UNX que muestran informacin bsica del sistema o manipulan archivos. Scripts de shell ms
complejos consisten en variables y comandos de programacin incorporados que incluyen al
comando read para una entrada interactiva, los comandos condicionales if , test y case y los
comandos de bucle for , while y until .
No es un requisito que el usuario escriba scripts de shell para utilizar o administrar un sistema
UNX. No obstante, cuanto ms se utiliza UNX, ms encontrar el usuario instancias en las cuales
una tarea llevada a cabo reiteradamente no tiene un nico comando UNX. 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 iniciar este laboratorio, el alumno deber repasar el Captulo 15 -
ntroduccin a los Scripts de Shell.
b) El alumno necesitar lo siguiente:
1. Una D de login de usuario, por ejemplo user2 y contrasea asignadas por el
instructor.
2. Una computadora que funcione con el sistema operativo UNX.
3. Computadoras en red en el aula con el sistema de archivos de la clase instalado.
Notas:
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
1 - 8 Conceptos Fundamentales sobre UNX 2.0-Laboratorio 15.2.8 Copyright 2002, Cisco Systems, nc.
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 fueron asignados por su instructor en el
recuadro de entradas del CDE.
Paso 2. Acceder a la Lnea de Comandos.
Haga clic con el botn derecho en el fondo del espacio de trabajo 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
dentificar 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 archivo script el alumno deber evitar utilizar el nombre de un
comando existente o un alias de unix.
b. Normalmente, los archivos script terminan con sh.
c. Normalmente, en qu directorio se ubican los scripts de shell creados por el usuario?
En el subdirectorio /bin. Su ruta absoluta es /home/bin
2 - 8 Conceptos Fundamentales sobre UNX 2.0-Laboratorio 15.2.8 Copyright 2002, Cisco Systems, nc.
d. Qu carcter se utiliza antes de un comentario en un archivo script?
numeral "#
e. Qu se agrega al script que le dice al sistema qu shell utilizar al interpretar las lneas
del script? #! o # Dnde se ubica esta lnea en el
archivo script?
f. Cul es el resultado de echo "date? establece una cadena expresando "fecha
g. Cul es el resultado de echo `date`? establece una cadena expresando "fecha "
h. Cul es el resultado de echo '$LOGNAME'? crea una cadena de caracteres con '$LOGNAME'
i. Cul es el resultado de echo "$LOGNAME? resuelve el parmetro dentro de la comilla simple mosrtando
en el script el nombre del usuario loggeado, en este caso root
Paso 4. Ejectar el script.
Los scripts de shell siempre se ejecutan en un shell separado. 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 alumno para ejecutar el script llamado whoison.sh? El archivo
whoison.sh no tiene permiso de ejecucin. con el comando ksh al inicio seguido del nombre del script_
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 555 [nombre_del script]
c. El archivo script ejecutable whoison.sh se encuentra en el directorio ~/bin. Cuando el
alumno tipea el archivo whoison.sh para ejecutarlo, el shell muestra el mensaje
"command not found ("no se encontr el comando). Cul es el problema?
Probablemente el archivo script no est en la carpeta actual del directorio
Paso !. Hacer de"g del script.
Un problema comn al escribir scripts de shell es que el shell no interpreta 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 identificar en qu parte del script se encuentran los problemas. La opcin -x muestra
cada lnea despus de haber sido interpretada por el shell y coloca un signo ms (+) despus de
haber ejecutado cada lnea. La opcin -v es similar 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 siguiente resultado desde el
archivo script whoison.sh? ___ksh xv whoison.sh ___
echo Hello $LOGNAME!
+ echo Hello user10!
Hello user10!
echo The number of users logged on s! "#ho $ #c %l"
#ho $ #c %l
+ echo The number of users logged on s! &
The number of users logged on s! &
echo Tod'()s d'*e s! "d'*e"
d'*e
+ echo Tod'()s d'*e s! +r ,un -1 -00-
Tod'()s d'*e s! +r ,un -1 -00-
3 - 8 Conceptos Fundamentales sobre UNX 2.0-Laboratorio 15.2.8 Copyright 2002, Cisco Systems, nc.
Paso #. Crear$ ejectar % hacer de"g de n script de shell simple.
a. Cree un script llamado firstscript.sh en el directorio home del usuario 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 "Today's 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.
# current user status script
Echo "la fecha actual de hoy es:
Date
Echo "a continuacin se muestra el calendario actual
Cal
Echo "el numero de usuarios loggeados son:
Who | wc -l
b. Cree un directorio bin en el directorio home del alumno, preparndose para el prximo
archivo script del alumno.
c. Modifique la variable PATH en .profile o .bash_profile para que el directorio bin que
acaba de crearse en el directorio home del alumno se encuentre en la ruta de
bsqueda.
d. Cree otro script llamado info.sh en el directorio ~/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. mprimir 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 &. Scripts complejos tili'ando programaci(n del shell.
ncorporado a cada shell UNX hay un lenguaje de programacin completo que consiste en
comandos y construcciones que pueden utilizarse 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.
)aria"les
Una variable es un placeholder o marcador de posicin para la informacin 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 .
Las variables locales se configuran utilizando el formato VARABLE=valor. Por ejemplo,
BACKUPDR=/home/user2/myfiles configura la variable llamada BACKUPDR (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 shell especiales incorporadas que pueden
proporcionar el nombre del archivo script o argumentos al script a medida que se ejecuta. Sus
valores se toman de argumentos de la lnea de comandos.
Parmetro
$0
$1 - $9
$*
$#
Entradas interactivas
Propsito y ejemplo
Comando o nombre del script
echo "The name of the script file is $0
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 = $#
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 nica lnea de entrada. 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 sea que introduzca el alumno se almacena en el nombre de la variable
especificada despus del comando 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 "ntroduzca 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 script llamado whoison.sh en el directorio ~/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 usuario 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 resultado del comando who que contiene
informacin acerca del usuario especificado.
b. Cree y luego ejecute el script grepfor.sh que se muestra a continuacin. Utilice 'root'
para el patrn y '/etc/passwd' como archivo a buscar la primera vez que el alumno
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)
5 - 8 Conceptos Fundamentales sobre UNX 2.0-Laboratorio 15.2.8 Copyright 2002, Cisco Systems, nc.
read filename
echo
echo Results:
grep $pattern $filename
c. Modifique el script para que cuando el alumno lo ejecute y especifique "user para el
patrn y "/etc/passwd para el archivo el resultado sea la cantidad de cuentas del
usuario del archivo password que tengan "user en el nombre. Qu ha cambiado?
el archi*o.
Paso 8. Scripts complejos que utilizan los comandos if , test y case .
Para ser til, un programa 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 condicin es verdadera o falsa. Si la condicin es verdadera,
ejecute cualquier cantidad de comandos subsecuentes. Si la condicin no es verdadera, contine
con el script.
Los comandos que llevan a cabo algunas tareas basndose en si una condicin tiene xito o falla
se denominan comandos condicionales. Los tres comandos condicionales ms frecuentemente
utilizados son if , test y case .
El Formato del Comando if-then: El Formato del Comando if-then-elif (else if):
if (si) el comando tiene xito if el comando tiene xito
then (entonces) then
ejecutar comando o comandos fi 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: El comando condicional incorporado al shell
test se utiliza a menudo para probar una o
if el comando tiene xito
ms condiciones a continuacin del comando
then if .
ejecutar comando o comandos
El Formato del Comando if-test:
else if test expresin o if [ expresin ]
ejecutar comando o comandos then
fi 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.
6 - 8 Conceptos Fundamentales sobre UNX 2.0-Laboratorio 15.2.8 Copyright 2002, Cisco Systems, nc.
a. Modifique el script whoison2.sh del directorio ~/bin para que acepte un nombre de
usuario como argumento y si el usuario 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:
.!/bn/0sh
. *es*11sh scr2* *o demons*r'*e *he *es* comm'nd
echo 3o (ou #'n* ' long ls*ng of *he fles n *he curren*
drec*or(4
echo en*er ( for 5es or n for No!6c
c. Modifique el script test1.sh para que:
Lea la respuesta dada por el usuario que ejecuta el script en una variable
llamada 'answer'.
Pruebe la respuesta introducida por el usuario 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 +. Scripts complejos ,e tili'an control de -ljo ."cles/.
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 directorio o lista, cada lnea de un archivo, o cada palabra de una lnea. El shell
proporciona tres construcciones de bucles 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 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
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
7 - 8 Conceptos Fundamentales sobre UNX 2.0-Laboratorio 15.2.8 Copyright 2002, Cisco Systems, nc.
a. Qu hace el siguiente script de bucle for cuando se lo ejecuta?
.!/bn/b'sh
for +7LE n fle8
do
ls %l $+7LE
done
echo 'll done!
9 el 'rch:e e;s*e< en el drec*oro1 A2lc'r' el com'ndo ls =l den*ro del
drec*oro ubc'do< c'd' :es >ue se e?ecu*e es*' o2er'c@n
b. Cree y luego ejecute el script de shell que figura arriba y nmbrelo loop1.sh. Colquelo
en ~/bin.
c. Modifique el script loop1.sh para que muestre un listado largo de todos los archivos
introducidos en la lnea de comandos. Por ejemplo $ loop1.sh file1 file2 o $ loop1.sh
file*, en lugar de aqullos especificados en el script, como arriba.
.!/bn/b'sh
for loo21sh n
fle8
do
ls %l $+7LE
done
echo 'll done!
d. Cree un script llamado loop2.sh y colquelo en ~/bin. El script utilizar el bucle until. Al
ejecutarse, el script verificar para ver si un usuario, especificado como argumento del
script, est loggeado. Si el usuario especificado no est actualmente loggeado, el
script mostrar el mensaje "<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 script mostrar el
mensaje "<specified user> is logged on.
e. Pruebe el script loop2.sh en una ventana de terminal utilizando el nombre de usuario
del alumno como argumento para el script. Por ejemplo, $ loop2.sh user1. Qu
mostr el script? muestra un mensaje que el usuario esta loggeado
f. Ejecute nuevamente el script utilizando un nombre de usuario diferente. El nombre de
usuario debe figurar en la lista del archivo /etc/password. Por ejemplo, $ loop2.sh
user5. Qu mostr el script? muestra un mensaje que el usuario no esta loggeado
g. Deje el script en ejecucin y abra otra ventana de terminal. Utilizando la utilidad telnet,
el alumno deber loggearse a su 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? S.
h. Cree un nuevo script llamado counter1.sh y colquelo en el directorio ~/bin. ntroduzca
las siguientes lneas de este script de bucle while:
.!/bn/0sh
. coun*s from 1 *o A *hen ds2l'(s 7 c'n coun*!
.
numB0 .n*'lCe *he coun* :'r'ble
while D $num %l* E F .loo2 #hle $num s less *h'n E
do
echonumber! $num
numB"e;2r $num + 1" .ncremen* coun* b( one
done
echo 7 c'n coun* !
i. Ejecute el script, haga debug de ser necesario. Cont el script de uno a cinco?
no Qu debe cambiarse en el script para que cuente de uno a cinco?
cambiar el numero 6 por el numero 5
Paso 10. Cerrar la *entana de terminal % hacer logot.
Haga doble clic en el botn de raya del extremo superior izquierdo de la pantalla, luego haga clic en
el cono EXT (SALDA) del panel frontal.

Potrebbero piacerti anche