Вы находитесь на странице: 1из 13

UNI

Sistemas Operativos y Redes

Gua de Laboratorio No.4

Programacin en el Shell Script


Sistemas Operativos y Redes Ingeniera en Computacin
CONTROL
DE

VERSIN
FECHA Diciembre, 2011 DESCRIPCIN DEL CAMBIO Versin Original

NOMBRE COMPLETO Glenda Barrios Aguirre

NDICE

DE

CONTENIDO

Introduccin
En prcticas anteriores hemos utilizado la Interfaz de la Lnea de Comandos (CLI) del Shell para realizar distintas tareas con la ejecucin de comandos. Los Shell Script nos permiten automatizar procesos de administracin, o bien para automatizar tareas operativas de usuarios, se establece una secuencia lgica de ejecucin de comandos, todo de una sola vez y en un solo archivo, al que se denomina Script.
Profesora: Glenda Barrios Aguirre Pgina 1

UNI

Sistemas Operativos y Redes

4.1 Principios Bsicos de Programacin en el Shell Script


Caractersticas Principales de un Programa en el Shell Script 1. Linux identifica un programa en el shell script a partir de la instruccin de cabecera #! /bin/bash 2. Los comentarios en cdigos se reconocen mediante el carcter de inicio #. Ejemplo. # Esto es mi primer programa 3. Los mensajes a pantalla los podemos enviar mediante la instruccin echo. Ejemplo echo Hola a todos 4. Los mensajes en pantalla que requieren mostrar el valor de la variable a la par del mensaje, usan el echo con el parmetro n. Por ejemplo. echo n La fecha actual es date 5. El archivo debe tener permisos de ejecucin para el propietario, para ello debe utilizar el comando chmod con todos los permisos para el dueo. A continuacin se muestran algunos ejemplos que ilustran la estructura bsica de los shell script.

Ejemplo No.1: Datos generales de conectividad


Se requiere un programa en el shell script que muestre la fecha actual y los usuarios conectados al momento de ejecucin del programa. Solucin: 1. Entre a la consola 2. Cree tres usuarios distintos a root 3. Cargue distintas terminales una con cada usuario distinto 4. Abra otra terminal como root 5. Cargue el pico y cree el archivo shUsuariosConectados, para ello digite.

6. Dentro del editor escriba las lneas de cdigo del grfico

Profesora: Glenda Barrios Aguirre

Pgina 2

UNI

Sistemas Operativos y Redes

7. Asigne permisos de ejecucin al archivo, tecleando desde la lnea de comandos lo mostrado en la figura.

8. Ejecute el archivo digitando 9. La salida generada por este programa debe ser parecida a lo mostrado en la figura. Como podr ver en el cdigo, el programa consiste de una secuencia de comandos, el clear que limpia la pantalla, date que muestra la fecha actual y who quien muestra los usuarios conectados al momento de ejecucin del programa.

Ejemplo No.2: Datos del Usuario Actual


Se requiere un programa en el shell script que muestre los datos del usuario actual, para ello se requiere que haga uso de las variables de ambiente y el comando echo para enviar mensajes.
Profesora: Glenda Barrios Aguirre Pgina 3

UNI

Sistemas Operativos y Redes

Las variables de ambiente que ofrece la consola del Shell pueden consultarse ejecutando desde la lnea de comandos la instruccin:

Siendo algunas de las variables de ambiente disponibles las siguientes: BASH: Nos da el nombre del shell bash por defecto BASH_ALIASES: El alias definido para el Shell USER: Nos da el usuario actual HOME: Nos da el directorio de trabajo actual UID: Id del usuario conectado en la terminal donde se ejecuta el comando Para consultar el valor de cada variable, simplemente debe digitar desde la lnea de comandos un echo de la variable que se pretende consultar.

El programa de Shell script que se muestra a continuacin utiliza las variables de ambiente y el comando echo para enviar mensajes, el echo simple, y con el parmetro n para enviar el dato en la misma lnea del comentario.

Solucin: 1. Entre a la consola y conctese como root. 2. Cargue el pico y cree el archivo shUsuarioConectado, para ello digite.
Profesora: Glenda Barrios Aguirre Pgina 4

UNI

Sistemas Operativos y Redes

$pico shUsuarioConectado 3. Agregue el contenido que se muestra en la figura

4. Como podr ver el echo n hace que el valor de la variable $USER aparezca justo despus del mensaje. 5. Proceda asignar permisos de ejecucin al archivo con la instruccin

6. Ejecute el archivo tecleando. La salida producto de la ejecucin del comando debe ser parecida a la mostrada en la figura.

Ejemplo No.3. ltimos usuarios registrados en el sistema


Se requiere que escriba un programa en el shell script que liste los ltimos n usuarios registrados en el servidor.
Profesora: Glenda Barrios Aguirre Pgina 5

UNI

Sistemas Operativos y Redes

En este ejemplo se introduce al uso de las variables, estas se pueden definir simplemente escribindola y asignando el valor, sin embargo para hacer uso de ella hay que anteponer el carcter especial del $. Por ejemplo en la figura de abajo se define una variable con el nombre de CantUsuarios y para hacer referencia a su valor se antepone el signo de dlar.

Solucin: 1. Entre a la consola y conctese como root. 2. Cargue el pico y cree el archivo shInfoUsuarios para ello digite.

3. Agregue el contenido que se muestra en la figura. La primer linea de cdigo define una variable llamada CantUsuarios, que es usada por el comando tail para visualizar en este caso los ltimos 5 usuarios registrados en /etc/passwd, adems se hace uso del signo de redireccionamiento de salida > para escribir la salida del comando en el fichero llamado UltimosUsuarios.info y por ltimo visualizamos el contenido del archivo con more.

7. Proceda asignar permisos de ejecucin al archivo shInfoUsuarios con el comando chmod tal como se ha venido haciendo.
Profesora: Glenda Barrios Aguirre Pgina 6

UNI

Sistemas Operativos y Redes

8. Agregue 5 usuarios distintos 9. Ejecute el programa repitiendo el paso 6 del ejemplo anterior, verifique que en la salida se muestren los 5 usuarios que cre.

Ejemplo No.4. ltimos usuarios registrados en el sistema


Se requiere realizar un programa en el shell que muestre los procesos activos al momento que se ejecuta el programa. La idea de este programa es usarlo como soporte de administracin para saber que procesos estaban activos al momento que se descarg el servidor. En la solucin de este ejemplo se hace uso de: Asignacin de comandos a variables que funcionan como alias. La Sintaxis es: Variable = ` + Comando + `, por ejemplo Fecha = `date, esto significa que al hacer referencia a la variable Fecha es como si estuviramos ejecutando el comando date. Los caracteres especiales son los apostrofes invertidos.

Filtros o Pipe, en este ejemplo se hace uso del Pipe definido en Linux por el carcter especial |, esto es necesario cuando requerimos que la salida de un comando corresponda a la entrada del segundo. La sintaxis es: comando | comando, por ejemplo ls al | more

Solucin: 1. Entre a la consola y conctese como root. 2. Cargue el pico y cree el archivo shProcesosActivos para ello digite. $pico shProcesosActivos 3. Agregue al archivo el contenido que se muestra en la figura

Profesora: Glenda Barrios Aguirre

Pgina 7

UNI

Sistemas Operativos y Redes

Del cdigo anterior podemos ver que se declara una variable llamada FechaActual a la cual se le traspasa lo regresado por el comando date, el cual se formatea a dos dgitos para que muestre el da, mes y ao. Se listan los procesos activos en la terminal y la salida se manda a un archivo con el nombre Procesos. + el valor que toma la variable $FechaActual lo cual depender de la fecha en la que se ejecute el archivo. La ltima instruccin visualiza el contenido del archivo creado pgina a pgina usando el PIPE.

4. Asigne permisos de ejecucin al fichero con el chmod. 5. Compruebe con un ls, la creacin del fichero que contiene la lista de procesos actuales. 6. Ejecute el programa desde la lnea de comandos TIP del ECHO: Si agrega dentro de cualquier programa del shell script la instruccin echo El valor es $15 El shell entiende que $1 es un parmetro de la lnea de comandos, y el 5 es el valor asignado, siendo la salida: El valor es 5

Profesora: Glenda Barrios Aguirre

Pgina 8

UNI

Sistemas Operativos y Redes

Si lo que en realidad se requiere es mandar esta cadena a pantalla se debe usar un carcter especial para que entienda que es una cadena y no una variable o parmetro, ver instruccin. echo El valor es \$15, en este caso la salida es: El valor es $15

4.2. Usando comandos estructurados


La programacin en el shell script al igual que cualquier otro lenguaje cuenta con sus sentencias de control, expresiones regulares, etc. Todo esto se aborda en la Parte II del libro de Linux Command Line, est gua comprende nicamente los captulos 8, 9, 10 y 11, se sugiere hacer lectura para profundizar aun mas.

Sentencia If
La sentencia de control if tiene las siguientes sintaxis: Sintaxis de la Estructura simple (if) if command then Secuencia de comandos fi Sintaxis de la Estructura compuesta (if then else) if command then Secuencia de comandos else secuencia de comandos fi

Sintaxis de la Estructura compuesta (Varios ifs) if command then secuencia de elif command then secuencia de elif command then secuencia de else secuencia de fi comandos comandos comandos comandos

Profesora: Glenda Barrios Aguirre

Pgina 9

UNI

Sistemas Operativos y Redes

La condicin del if se puede especificar de distintas maneras, ya fuera con: a. Comandos: Esto significa que dentro puede incluir la ejecucin de un comando determinado y segn su resultado determinar la accin. El comando puede retornar distintos valores, los cuales se detallan en la pgina 224 del libro texto. b. Comparaciones numricas: Si lo que se desea es incluir una condicin donde se evalen valores numricos, la condicin debe encerrarse entre corchetes usando cualquiera de los valores incluidos en la tabla. Ver pgina 235 del libro. Item 1 2 3 4 5 6 Comparaci Descripcin n N1 eq N2 Verifica si N1 es igual a N2 N1 ge N2 Verifica si N1 es mayor o igual que N2 N1 gt N2 Verifica si N1 es mayor que N2 N1 le N2 Verifica si N1 es menor o igual que N2 N1 lt N2 Verifica si N1 es menor que N2 N1 ne N2 Verifica si N1 es distinto de N2

c. Comparacin de cadenas: Se ofrece otro grupo de opciones cuando lo que se quiere es especificar condiciones con cadenas. Ver tabla Item Comparaci Descripcin n 1 Str1 = Str2 Verifica si Str1 es igual a Str2 2 Str1 = Verifica si Str1 es distinto a Str2 Str2 3 Str1 < Str2 Verifica si Str1 es menor a Str2 4 Str1 > Str2 Verifica si Str1 es mayor a Str2 5 -n Str1 Verifica si Str1 tiene una longitud mayor que 0 6 -z Str1 Verifica si Str1 tiene una longitud igual a 0 d. Comparacin de archivos: Se lo deseado es realizar condiciones con archivos podemos usar cualquiera de los valores de la tabla 93 de la pgina 241 del libro.

Ejemplo No.5. Buscando un login de usuario en el /etc/passwd


Se requiere hacer un programa en el shell script que segn el login de usuario especificado como parmetro determine si existe o no en /etc/passwd, esto lo
Profesora: Glenda Barrios Aguirre Pgina 10

UNI

Sistemas Operativos y Redes

necesita el administrador de red porque tiene varios usuarios con el mismo nombre y apellido. Es vlido aclarar que cuando usamos parmetros desde la lnea de comandos, luego que ejecutamos el programa debemos especificar el valor del parmetro de entrada. El nmero mximo de parmetros que podemos especificar es 50. En este ejemplo se usa el if con condiciones de tipo comando. SINTAXIS: $ sh Nombre_Programa ValorParametro1 ValorParametro2 ValorParam_n De la instruccin anterior, el shell interpreta: $1 = ValorParametro1 $2 = ValorParametro2 $n = ValorParametron Esto significa que si especificamos desde la lnea de comandos: $sh shBuscaUsuario glenda, el shell interpretara esto como: Nombre_Programa = shBuscaUsuario $1 = glenda Solucin: 1. Entre a la consola y conctese como root. 2. Cargue el pico y cree el archivo shBuscaUsuario para ello digite. $pico shBuscaUsuario 3. Agregue dentro del editor el contenido que est especificado en la imagen, salve y slgase.

Profesora: Glenda Barrios Aguirre

Pgina 11

UNI

Sistemas Operativos y Redes

4. Asigne permisos de ejecucin al archivo con el comando digitando. $chmod 755 shBuscaUsuario 5. Para realizar la prueba del programa agregue dos usuarios al uno con el nombre glenda y otro con el nombre victor. 6. Pruebe ejecutar el programa con la instruccin donde $1 toma de glenda. $sh shBuscaUsuario glenda 7. Prueba ejecutar el programa con la instruccin donde $1 toma de victor. $sh shBuscaUsuario victor 8. Pruebe ejecutar el programa con la instruccin donde $1 toma de francisco. $sh shBuscaUsuario francisco

chmod sistema el valor el valor el valor

Ejemplo No.6. Estructura de directorio del Usuario

Se requiere hacer un programa en el shell script que determine si el login del usuario especificado como parmetro existe, adems debe validarse que tenga definida su estructura de directorios en /home. En este programa se requiere que se haga uso del uso de variables, la setencia if con else, se haga uso de las condiciones de bsqueda de archivos. Solucin 1. Entre a la consola y conctese como root. 2. Cargue el pico y cree el archivo shDatosUsuario para ello digite. $pico shDatosUsuario 3. Agregue al archivo el contenido que se muestra en la figura
Profesora: Glenda Barrios Aguirre Pgina 12

UNI

Sistemas Operativos y Redes

9. Asigne permisos de ejecucin al archivo con el comando chmod digitando. $chmod 755 shDatosUsuario 10. Para probar el programa desde otra terminal agregue dos usuarios uno con directorio de trabajo en /home y otro sin directorio en /home 11. Al usuario creado dentro de /home, agregue al menos dos directorios, y archivos a cada uno de ellos. 12. Ejecute el programa especificando como parmetro un usuario que exista dentro de home 13. Ejecute el programa especificando como parmetro un usuario que no exista 14. Ejecuta el programa especificando como parmetro un usuario que existe pero que no tenga directorio dentro de /home.

Bibliografa de Referencia
LINUX Command Line and Shell Scripting Richard Blum Captulo 8,9,10,11

Profesora: Glenda Barrios Aguirre

Pgina 13