Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


scripts linux smr sistemas en red, Apuntes de Informática

Apuntes scripts linux para smr

Tipo: Apuntes

2018/2019

Subido el 13/05/2019

usuario desconocido
usuario desconocido 🇪🇸

1 documento

1 / 29

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Linux Script
Página 1
PROGRAMACIÓN DE SCRIPTS EN SHELL
INTRODUCCIÓN:
Los programas shell (Guiones del Shell, guiones, programas Shell, Shell Scripts o Scripts) son un conjunto de
órdenes del shell escritas en un fichero ordinario de Linux en formato texto puro que son interpretadas por el núcleo
del sistema. Los scripts son muy potentes y eficaces, entre sus características podemos incluir:
Interpretado
Permite programación estructurada.
Interactivo (read , echo)
Sentencias de Control de flujo del programa (If..., Case..., While..., Until..., For......)
Tratamiento y operaciones con Variables del Sistema y de Usuario.
Uso de argumentos de entrada.
Funciones.
Sintaxis compleja.
Poca capacidad para cálculo numérico (no están diseñados para este uso).
CREACIÓN Y EJECUCIÓN DE UN SCRIPT:
Para crear un Guión solo es necesario disponer de un Editor que disponga de modo texto puro como es el vi. Si
estamos trabajando desde un terminal en red se puede usar un editor externo desde otro S. Operativo (Windows
por ejemplo) y transferir el fichero vía FTP o usar las opciones copiar-pegar.
Las formas de ejecutar un Guión son las siguientes:
1. $ . /nombre_script
2. $ exec nombre_script
Método 1: $ . / nombre_script
El punto ha de ir separado por un blanco del nombre del Script.
Es necesario que el fichero Script tenga permiso de ejecución (chmod u+x).
El programa se ejecuta en el entorno actual y no se crea ningún subshell.
Método 24: $ exec nombre_Script
Es necesario que el fichero Script tenga permiso de ejecución (chmod u+x).
El programa se ejecuta en el entorno actual y no se crea ningún subshell., al finalizar, nos saca a lógin.
Se recomienda no usar este método ya que exec tiene otros usos muy importantes.
COMENTARIOS EN EL SHELL:
Siempre es recomendable añadir comentarios a nuestros programas en cualquier lenguaje, una buena norma es
además de los comentarios específicos donde sean necesarios, usar una cabecera con el Nombre del programa y
las principales características.
En los scripts, una línea de comentario debe empezar por el símbolo almohadilla (#)
# Búsqueda de cadenas
# Fecha: 18/02/2003
# Autor: J.A. Sánchez
# Modificado por: A.S. Romero.
# Este programa sirve para ...utiliza ...
# .....................
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d

Vista previa parcial del texto

¡Descarga scripts linux smr sistemas en red y más Apuntes en PDF de Informática solo en Docsity!

PROGRAMACIÓN DE SCRIPTS EN SHELL

INTRODUCCIÓN:

Los programas shell ( Guiones del Shell, guiones, programas Shell, Shell Scripts o Scripts ) son un conjunto de órdenes del shell escritas en un fichero ordinario de Linux en formato texto puro que son interpretadas por el núcleo del sistema. Los scripts son muy potentes y eficaces, entre sus características podemos incluir:

  • Interpretado
  • Permite programación estructurada.
  • Interactivo (read , echo)
  • Sentencias de Control de flujo del programa (If..., Case..., While..., Until..., For......)
  • Tratamiento y operaciones con Variables del Sistema y de Usuario.
  • Uso de argumentos de entrada.
  • Funciones.
  • Sintaxis compleja.
  • Poca capacidad para cálculo numérico (no están diseñados para este uso). CREACIÓN Y EJECUCIÓN DE UN SCRIPT: Para crear un Guión solo es necesario disponer de un Editor que disponga de modo texto puro como es el vi. Si estamos trabajando desde un terminal en red se puede usar un editor externo desde otro S. Operativo (Windows por ejemplo) y transferir el fichero vía FTP o usar las opciones copiar-pegar. Las formas de ejecutar un Guión son las siguientes:
  1. $. /nombre_script
  2. $ exec nombre_script Método 1: $. / nombre_script
  • El punto ha de ir separado por un blanco del nombre del Script.
  • Es necesario que el fichero Script tenga permiso de ejecución (chmod u+x).
  • El programa se ejecuta en el entorno actual y no se crea ningún subshell. Método 24: $ exec nombre_Script
  • Es necesario que el fichero Script tenga permiso de ejecución (chmod u+x).
  • El programa se ejecuta en el entorno actual y no se crea ningún subshell., al finalizar, nos saca a lógin.
  • Se recomienda no usar este método ya que exec tiene otros usos muy importantes. COMENTARIOS EN EL SHELL: Siempre es recomendable añadir comentarios a nuestros programas en cualquier lenguaje, una buena norma es además de los comentarios específicos donde sean necesarios, usar una cabecera con el Nombre del programa y las principales características. En los scripts, una línea de comentario debe empezar por el símbolo almohadilla (#)

Búsqueda de cadenas

Fecha: 18/02/

# Autor: J.A. Sánchez # Modificado por: A.S. Romero. # Este programa sirve para ...utiliza ... # .....................

VARIABLES DE USUARIO:

Es posible definir variables por parte del usuario, las normas y significado de las mismas son las siguientes:

  1. Para definirlas se admiten Mayúsculas, minúsculas, números y carácter subrayado. Deben comenzar por un carácter Alfabético o Subrayado.
  2. No es necesario declararlas previamente a su uso, si se usa una variable que no ha sido creada o asignada, su valor es nulo.
  3. No tienen tipo, todo lo que se escriba en ellas, tiene significado de carácter. Los números se almacenan como si fuesen cadenas de texto y no en formato binario como puede ser en un lenguaje orientado a proceso de datos.
  4. Para su asignación se usa el símbolo igual sin blancos a los lados:
    • Variable1=valor1 [ variable2=valor2 variable3=valor ....] nombre=pepe
  5. Se pueden crear y usar variables en Shell fuera de los Script
  6. Para utilizar el contenido (operar, visualizar, mover..) de una variable se antepone delante del nombre el símbolo $ $ echo Tu nombre es $nombre
  7. Las variables son locales al shell donde se han creado. En el caso de querer poder usadas en el Shell actual y todos los subshell que se utilicen, hay que usar la orden export : - export - export lista_variables nombre=pepe edad= nombre=pepe edad= export nombre edad Las variables que se exportan, mantiene su valor del shell padre a los hijos, etc. Pero nunca al contrario, una variable exportada no se exporta al shell padre del actual donde se ha creado. Las variables exportadas se las llama a veces variables globales o variables de entorno (aunque este último nombre a veces se reserva las variables del Sistema). Usando export sin argumentos se muestra la lista de variables exportadas.
  8. Cuando se usen variables en expresiones de comparación se recomienda ponerlas entrecomilladas, el no hacerlo es una fuente de problemas.
  9. Si la variable va a contener cadenas con caracteres en blanco hay que usar comillas para asignarla: Las variables son locales al Shell actual Las variables son globales al shell actual y subshells.

Son variables globales creadas por el sistema (ya están exportadas). Algunas son modificables por el usuario (PATH, PS1,...) y otras no lo son (LOGNAME). A continuación se muestran algunos valores de variables del Sistema: o CDPATH Nombre del path usado por la orden cd, si no tiene nada examina el de trabajo o EDITOR Editor predetermindo que usaran los programas. o HOME Directorio del usuario. o LOGNAME Nombre de usuario. o MAIL nombre del archivo del buzón de correo del usuario. o MAILCHECK Segundos que usa el shell para mirar si examinar el correo y mandar aviso. o PATH Ruta de búsqueda del usuario, donde el shell busca ls ordenes externas. o PPID Identificación del proceso padre del actual. o PS1 y PS2 Indicadores del prompt primario y secundario. o SHELL Ruta absoluta del Shell que estamos usando. o TERM Tipo de terminal que estamos usando. ORDENES SET, ENV y EXPORT SIN ARGUMENTOS: Orden set La orden set sin argumentos informa los nombres y los valores todas las variables locales y del entorno, sean del usuario o del sistema. Orden env La orden env sin argumentos informa de los nombres de las variables de entorno, pero no incluye a las del usuario. En general da menos información que set. Orden export La orden export sin argumentos informa los nombres y los valores todas las variables exportadas en el shell actual. ARGUMENTOS PARA LOS SCRIPTS: Se puede invocar un script con argumentos de forma que internamente se reciban en unas variables denominadas parámetros posiciónales.

  • nombre_script [argu1 argu2 argu3.....argu9] $ agenda Lopez Mostoles 34 916642334 Los argumentos se escriben separados por blancos o tabuladores generalmente. Las variables o parámetros posiciónales no son modificables y se denominan $1, $2..... $9 (Se pueden usar hasta 9 parámetros en la línea de órdenes, este límite se puede ampliar con la orden shift aunque es inusual programas con un nº tan elevado de parámetros). $ mi_agenda Lopez Mostoles 34 916642334 En este ejemplo internamente las variables posiciónales se cargan con:

$1  Lopez

$2  Mostoles

Otras variables internas relacionadas con los argumentos de un script son:

  • $# Nº de argumentos de la línea de órdenes.
  • $* Contiene la totalidad de los argumentos.
  • $@ Idem, pero si se usa como “$@” los argumentos van entre comillas.
  • $0 Contiene el nombre del Script. MAS VARIABLES DEL SISTEMA:
  • $$ PID del proceso en ejecución.
  • $! PID del proceso de segundo plano más reciente invocado por el shell.
  • $? Código de estado del último comando ejecutado. Cada vez que se ejecuta una orden devuelve un código entre 0 y 255. El valor 0 nos indica que la orden se ha ejecutado correctamente, mientras que un valor diferente de 0, indica que se ha producido un error. El valor de los códigos de error difiere de una orden a otra y no son de especial interés en estos apuntes. ASIGNAR LOS PARÁMETROS POSICONALES DEL SHELL CON SET (AVANZADO): Se puede usar la orden set para asignar las variables posiciónales en un programa:
  • set argumentos Ejemplo: $ date Sat Aug 7 13 :26:42 PM 1999 $ set date $ echo “$1 $2 $3 $4 $5 $6” Sat Aug 7 13:26:42 PM 1999 $ echo “$@” Sat Aug 7 13:26:42 PM 1999 $ echo “$3 de $2 de $6” 27 de Aug de 1999 ORDEN EXIT: La orden exit sirve para transferir el control al proceso que hace la llamada. El argumento de la orden exit es número opcional, que se le proporciona al proceso que hace la llamada, como estado de salida del proceso que concluye.
  • exit [numero] Ejemplo: ................. ................. ................. ................. ................. exit 0 En el punto anterior vimos que todas las ordenes Linux proporcionan un código de estado 0 si se ejecutan correctamente que es recogido en la variable $?. No es necesario usar la orden exit a menos que se desee terminar un proceso desde varios puntos del código del mismo (mala práctica en programación estructurada).
  • Los argumentos situados entre comillas simples no son interpretados.
  • Los argumentos que estén entre comillas dobles no son interpretados excepto excepto el símbolo $, el símbolo \ , y las comillas simples y dobles. EL símbolo \ sirve para inhibir el significado especial del próximo carácter.
  • Los argumentos encerrados entre acentos graves (francés) ejecuta la orden y sitúa su salida estándar en el ámbito donde estén situados (sustitución de orden.) Orden read Si desea escribir un shell interactivo, que solicite información a través de la entrada estándar (stdin) teclado al usuario, se debe usar la orden read que sirve para asignar variables en tiempo de ejecución (similar al scanf del lenguaje C):
  • read variable1 variable2 variable3.......... Ejemplo: echo “Introduce tu Nombre y Edad: \c” read nom edad Hay que tener en cuenta que:
  • Las variables se escriben a continuación del read separadas por blancos.
  • La ejecución del programa se detiene cuando se encuentra un read y no continua hasta que se pulsa Enter. Los datos son introducidos como palabras separadas por blancos o tabuladores.
  • Las variables se asignan de izquierda a derecha.
  • Si el n º de palabras introducido es mayor que el nº de variables especificadas en read, se asigna a la última variable las palabras sobrantes.
  • Si el nº de palabras introducido es menor que el nº de variables especificadas en read, estas quedan con valor nulo. EJECUCIÓN DE ÓRDENES EN LOS SHELL.
  • Se pueden agrupar varias órdenes en una línea separadas por punto y coma, estas se ejecutaran de izquierda a derecha en un nuevo subshell. (orden1; orden2; orden3;.....)
  • Si deseamos que una orden o más ordenes se ejecute en el shell actual del script deberemos encerrarla entre llaves: { orden; } { orden1; orden2; orden3;..... }
  • Ejecución condicional de ordenes: ord1 && ord2Solo se Ejecuta ord2 si la ejecución de ord1 ha tenido éxito. ord1 || ord2Solo se Ejecuta ord2 si la ejecución de ord1 no ha tenido éxito. LA ORDEN EXPR (CÁLCULO NUMÉRICO Y COMPARACIONES):

Esta orden sirve para evaluar expresiones, su uso más simple es para hacer operaciones aritméticas sencillas y en menor medida para manipular cadenas.

  • expr argu1 operador argu2 [argu3 operador argu4 ].... Los Operadores aritméticos son:
    •  Suma argu1 y argu
    •  Resta argu1 y argu
    •  Multiplica argu1 y argu
  • /  División entera.
  • %  Resto de la división entera. Si hay varios operadores, la suma y la resta se evalúan en último lugar, a no ser que vayan entre paréntesis. Hay que recordar que los símbolos paréntesis y asterisco son especiales del lenguaje, por lo que para poderlos usar hay usarlos escapados (con el símbolo \ delante) o encerrados entre comillas simples. Los Operadores Relacionales son:
  • =  ¿Son iguales los argumentos?
  • !=  ¿Son distintos los argumentos?
  • >  ¿Es argu1 mayor que argu2?
  • <  ¿Es argu1 menor que argu2?
  • >=  ¿Es argu1 mayor o igual que argu2?
  • <=  ¿Es argu1 menor o igual que argu2? Estos operadores devuelven 0 (true) si el resultado de la comparación es cierto y 1 (false) si el resultado es falso. Los símbolos > y < tienen significado especial para el Sistema (redireccionamientos) así que hay que escaparlos o entrecomillarlos. Los operadores relacionales se usan para comparar operandos y tomar decisiones en función de los resultados. Se pueden usar ordenes cálculos más complejos que usen varios comandos expr. Otros operadores que se pueden usar con expr:
  • \ |Devuelve el primer argumento si ninguno de los dos, es nulo o 0, en caso contrario devuelve el segundo argumento.
  • &amp;Devuelve el primer argumento si ninguno de los dos, es nulo o 0, en caso devuelve 0. La orden expr se puede usar interactivamante en la línea de comandos del shell como una pequeña calculadora para pequeños cálculos: $ expr 5 + 8 13 $ expr 10 * 2 20  Hay que usar * para que el asterisco pierda su significado. $ expr 10 ‘*’ 2 20  Funciona igual $ expr 10 * 2  (^) Error La orden expr se usa normalmente en programación para asignar variables, para que la variable reciba el valor de la expresión, esta ha de estar entre acentos graves para que la orden se ejecute y devuelva el valor hacia la variable: $ valor = expr 500 / 25
  • El bucle se ejecuta mientras que el valor de retorno de la condición sea True (valor 0).
  • El bucle se ejecuta hasta que el valor de retorno de la condición sea True (valor 0). NOTAS:
  • Los bucles while y until evalúan la condición al principio (primero evalúan y después procesan el contenido) por lo tanto se ejecutaran de 0 a N veces.
  • Se pueden crear bucles infinitos utilizando los valores true o false (valores 0 y 1, al contrario del lenguaje C). while true do ….. done Bucle for: while condición do orden_ orden_ ....... done while condición; do orden_ orden_ ....... done until condición do orden_ orden_ ....... done until condición; do orden_ orden_ ....... done
  • La variable puede ser cualquier variable del Shell.
  • Los posibles valores de lista_de_valores se van asignando una por una a la variable que hayamos definido.
  • Por cada valor asignado, se ejecutan las ordenes comprendidas entre do... y...done.
  • Esta construcción del for toma los valores para la variable de los argumentos de la línea de órdenes.
  • Otra sintaxis de de bucle (este tipo de bucle for comparten una herencia común con el lenguaje de programación C):
  • La sintaxis anterior se caracteriza por una expresión de control de bucle de tres parámetros; consisten en un inicializador (expresión1), una prueba de bucle o condición (expresión2) y una expresión de conteo (expresion3). Alternativa case: for variable in lista_de_valores do orden_ orden_ ....... done for variable do orden_ orden_ ....... done

For ((expresión1; expresion2; expresion3))

do

orden 1

orden

orden

done

case cadena_a_evaluar in patron_1) Orden_ Orden_ ..... ;; patron_2) Orden_ Orden_ ..... ;; patron_n) Orden_n Orden_n ..... ;; esac

#!/bin/bash select ACCION in Empezar Repetir Acabar do case $ACCION in "Empezar") echo "El usuario quiere empezar" ;; "Repetir") echo "El usuario quiere repetir" ;; "Acabar") echo "El usuario quiere salir" break ;; *) echo "No sé qué quiere el usuario" ;; esac done LA ORDEN TEST (EVALUACIÓN DE ARCHIVOS, CADENAS Y NÚMEROS): La orden test se usa para evaluar expresiones y generar un valor de retorno, este valor no se devuelve a la salida estándar (pantalla), lo que hace es devolver 0 como código de retorno si la expresión se evalúa como true , y le asigna 1 si la expresión se evalúa como false. La orden test es de uso típico como condición para estructuras de control del tipo if, while y until. Formato de test para archivos:

  • test – opcion archivo
  • [ - opcion archivo ] IMPORTANTE: Si se usa el 2º formato con corchetes, a ambos lados de los mismos debe existir un espacio en blanco. Opciones importantes son:
    • f Devuelve verdadero (0) si el archivo existe y es ordinario.
    • s Devuelve verdadero (0) si el archivo existe y tiene un tamaño mayor que 0.
    • r Devuelve verdadero (0) si el archivo existe y tiene permiso de lectura.
    • w Devuelve verdadero (0) si el archivo existe y tiene permiso de escritura.
    • x Devuelve verdadero (0) si el archivo existe y tiene permiso de ejecución.
    • d Devuelve verdadero (0) si el archivo existe y es un directorio.
    • b Devuelve verdadero (0) si el archivo existe y es especial de bloques.
    • c Devuelve verdadero (0) si el archivo existe y es especial de bloques.
    • h Devuelve verdadero (0) si el archivo existe y es un enlace simbólico. - e Devuelve verdadero (0) si el archivo existe independientemente del tipo que sea Formato de test para cadenas
  • test cadena1 relación cadena
  • [ cadena1 relación cadena2 ]
  • test opcion cadena Los corchetes son obligatorios, no pertenecen a la Sintaxis de la orden
  • [ opcion cadena ] Las relaciones son:
  • = Devuelve verdadero (0) si ambas cadenas son iguales
  • != Devuelve verdadero (0) si las cadenas son distintas Las opciones son:
    • n Devuelve verdadero (0) si cadena tiene un valor (no nulo)
    • z Devuelve verdadero (0) si cadena no tiene valor (es nula). Formato de test para cadenas que representen valores numéricos enteros:
  • test valor1 relación valor
  • [ valor1 relación valor2 ] Las relaciones son:
    • lt Devuelve verdadero (0) si valor es menor que valor2.
    • le Devuelve verdadero (0) si valor es menor o igual que valor2.
    • gt Devuelve verdadero (0) si valor es mayor que valor2.
    • ge Devuelve verdadero (0) si valor es mayor o igual que valor2.
    • eq Devuelve verdadero (0) si valor es igual que valor2.
    • ne Devuelve verdadero (0) si valor es distinto que valor2. Operadores And y OR y NOT con cualquier tipo de test:
  • o  OR lógico. Ejemplo: [ - x /usr/miorg - o “$1” - eq 0 ]
  • a ^ AND lógico Ejemplo: [ - x /usr/miorg - a “$1 - ne 0 ] ! ^ NOT lógico. Ejemplo: [! - d /etc/usrmail ] Uso de paréntesis para agrupar expresiones: Se pueden usar paréntesis para agrupar y dar prioridad a expresiones, al escribirlos hay que poner espacios en blanco antes y detrás de los paréntesis. Los paréntesis tienen un significado especial para el lenguaje, para poder usarlos hay que escaparlos: \ ( ................... ) o encerrados entre comillas simples. TRATAMIENTO AVANZADO DE CADENAS CON EXPR:
  • expr substr cadena posi numc

echo El contenido de la variable $FECHA es $FECHA o El código anterior muestra una sustitución del contenido de una orden correctamente. FECHA=date echo la fecha actual es $FECHA o El código anterior muestra el intento erróneo de sustitución del contenido de una orden. FECHA=date eval $FECHA o El código anterior muestra un ejemplo de la orden eval que sirve para ejecutar el contenido de una variable (no está en los apuntes). echo “Dime tu nombre de usuario \c” read USUARIO PROGRAMAS=” ps – ef | grep $USUARIO “ echo “El usuario $USUARIO está corriendo los siguientes procesos: \n\n $PROGRAMAS” o El código anterior es un ejemplo de sustitución del contenido de una orden, informa de los programas en ejecución de un usuario introducido por teclado. if test $# - ne 3 then echo “No has introducido los 3 argumentos indicados” exit 1 else total=$1 + $2 + $ echo “La suma de $1 $2 y $3 es $total” fi o El código anterior es un ejemplo de cómo controlar que el nº de argumentos de una orden sea el correcto, el programa pretende sumar 3 valores numéricos pasados como argumentos. El uso de la palabra test se considera anticuado siendo sustituido por los corchetes. if [ “$#” - ne 3 ] then echo “No has introducido los 3 argumentos indicados” exit 1 else total=$1 + $2 + $ echo “La suma de $1 $2 y $3 es $total” fi o El código anterior es una versión con corchetes del test. Es buena costumbre encerrar todas las variables entre comillas. if [ “$#” != 3 ] then echo “No has introducido los 3 argumentos indicados” exit 1 else total=$1 + $2 + $ echo “La suma de $1 $2 y $3 es $total” fi o El código anterior no es muy recomendable, ya que usa la orden test para comparar cadenas, en este caso funciona correctamente. Observar el caso siguiente:

dato1=”6 “Hay un blanco detrás de la cifra 6 dato2= if [ “$dato1” – eq 6 ] then……. else….. fi if [ “$dato1” = 6 ] then……. else….. fi if [ “$dato2” - eq 5 ] then……. else….. fi if [ “$dato2” = 5 ] then……. else….. fi o En el ejemplo anterior se ejecuta el then del if 1º y 3º, pero en los if 2º y 4º se ejecuta el else. echo “Dime un nombre para el directorio \c” read DIRE if mkdir $DIRE then echo “El directorio $DIRE se ha creado correctamente” else echo “No se ha podido crear el directorio $DIRE “ fi o El código anterior sirve para comprobar si se ha creado un directorio, mediante una sustitución de orden en la condición del if. Si la instrucción se ejecuta devuelve el codigo de estado 0 que es true, por lo que se ejecuta la condición then del if. El problema de esta construcción es que la orden mkdir muestra la salida estándar de error por pantalla cuando no se puede ejecutar. echo “Dime un nombre para el directorio \c” read DIRE if [ - d “$DIRE” ] then echo “El directorio $DIRE ya existe else mkdir $DIRE echo “Se ha creado el directorio $DIRE “ fi o En el ejemplo anterior se hace uso de la opción – d del test para saber si el nombre introducido ya existe y es un directorio. Es mucho mejor que el otro. Además se ve la importancia de usar comillas en las variables: if [ - d $DIRE ] …….. En el caso de que $DIRE no existiese, el if quedaría como sigue: if [ - d ] .......... Algo que seguramente al intérprete del shell no él va a gustar nada. echo “Dime un nombre para el directorio \c” La condición se cumple La condición no se cumple La condición se cumple La condición no se cumple

El 2º ejemplo copia el fichero referenciado en la variable en el directorio /tmp, siempre que exista y tenga permiso de lectura. echo “Introduce un nombre de fichero” read dato if [ - f $dato ] then echo “ $dato es un fichero ordinario” elif [ - d $dato ] then echo “ $dato es un directorio” elif [ - l $dato ] then echo “ $dato es un enlace blando” elif [ - c $dato - o - b $dato ] then echo “ $dato es un fichero especial de dispositivo” else echo “No se que demonios es $dato” fi o Construcción if con alternativas múltiples, se evalúan de arriba abajo hasta que se encuentre una que sea cierta y se finaliza el if. En el caso de que no se cumpla ninguna condición se ejecutara las sentencias del else si es que existe. echo “Introduce un nombre de fichero” read dato if [ - f $dato ]; then echo “ $dato es un fichero ordinario” elif [ - d $dato ]; then echo “ $dato es un directorio” elif [ - l $dato ]; then echo “ $dato es un enlace blando” elif [ - c $dato - o - b $dato ]; then echo “ $dato es un fichero especial de dispositivo” else echo “No se que demonios es $dato” fi o Ejemplo idéntico al previo, pero ahorrándonos talar algún árbol (ocupa menos papel). clear clave=”agente007” echo “Introduzca la Clave \c” read respuesta while [ “$respuesta” != “$clave” ] do echo “Error, vuelve a intentarlo” echo “Introduzca la Clave \c” read respuesta done echo “ Puede usted pasar” o Ejemplo de bucle while con test de cadenas. clear clave=”agente007” echo “Introduzca la Clave \c” read respuesta until [ “$respuesta” = “$clave” ] do echo “Error, vuelve a intentarlo” echo “Introduzca la Clave \c” read respuesta done echo “ Puede usted pasar” o El mismo ejemplo pero con un until. Recordar que lleva evaluación al principio. clear respu=s while [ “$respu”=s - o “$respu”=S ] do echo “Que cadena quieres buscar \c”; read cadena echo “En que

fichero quieres buscarla \c”; read fichero if [ - f “$fichero” ] then grep “$cadena” “$fichero” > resultado if [ - s resultado ] then echo “La cadena $cadena buscada existe en el fichero $fichero” else echo “La cadena $cadena buscada no existe en el fichero $fichero” fi rm resultado else echo “El fichero $fichero no es un fichero ordinario” fi echo “quieres hacer mas búsquedas (s-n) \c”; read respu done o El ejemplo anterior es un script que realiza una búsqueda de una cadena en un fichero usando la orden grep. Como esta orden muestra su salida estándar por pantalla, se redirecciona a un fichero llamado respuesta. while true do ............ if………… break done o Si creamos un bucle infinito hemos de salir de alguna forma, mediante break para saltar a la sentencia posterior al mismo o con exit para finalizar el script. EJEMPLOS DE USO DE ESTRUCTURAS, TEST y EXPR (Continuación): Bucles For: $ cat > bucle for contador in 1 2 3 do echo “Este bucle se esta ejecutando $contador veces” done o El código anterior muestra un uso de la estructura for, la variable contador toma los valores de la lista sucesivamente. $ cat > mismensajes for puesto in kvsdai01 kvdai02 kvdai03 kvdai do mail $puesto < micarta done o Similar al anterior, envía un mail preescrito en el fichero micarta a 4 usuarios. $ cat > mira for fichero in * do echo $fichero done o En este caso se muestran todos los ficheros del directorio actual, ya que * representa a todos los ficheros. $ cat > cuenta cuenta=0 for fichero in * do