





















Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Apuntes scripts linux para smr
Tipo: Apuntes
Subido el 13/05/2019
1 documento
1 / 29
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!






















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:
Es posible definir variables por parte del usuario, las normas y significado de las mismas son las siguientes:
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.
Otras variables internas relacionadas con los argumentos de un script son:
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.
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:
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