Sistemas Informáticos Monousuario y Multiusuario Ud 11.7.- Programación Scripts 1.- Introducción Facilitar la automatización de tareas. 2.- Creación, ejecución y depuración de un script 2.1.- Creación 1.- Abrimos el editor de textos gedit y lo configuramos: 2.- Menú_Editar_Preferencias_Ver_Mostrar números de línea. 3.- La primera línea de nuestro script es: #!/bin/bash Para indicar el intérprete de comandos. 2.2.- Ejecución 1ª forma: $ sh nombre_script.sh 2ª forma: $ chmod a+x nombre_script.sh $./nombre_script.sh 2.3.- Depurar el script $ sh –x nombre_script.sh Ejemplo: + echo “Hola” El signo + muestra la línea del script Hola 3.- Salida estándar echo [opciones] [cadena] Dentro de la cadena, podemos utilizar: \n Salto de línea. Pero para que sea interpretada, debemos poner en opciones –e. Ejemplo: echo –e “Mi nombre es: \n Manuel” 3.1.- Comillas: ‘ ‘ Comillas simples. “ “ Comillas dobles. `comando` tildes invertidas. Todo lo que vaya entre estas comillas será interpretado literalmente. Lo mismo que el anterior, pero interpretando caracteres especiales como $ y `. Todo lo que vaya entre estas comillas será ejecutado. echo $variable Vemos el contenido de una variable. 1 Sistemas Informáticos Monousuario y Multiusuario Ejercicio: Comando $x=10 $echo ‘ El valor de x=$x’ $echo “ El valor de x=$x” $echo “ Hoy es `date` ” Salida en pantalla 4.- Entrada estándar. Leer una variable: read [opciones] variable Opciones: -s No se ve en pantalla lo que el usuario escribe. -n nº Lee un número de caracteres sin obligar a que el usuario pulse INTRO. -p “texto” Muestra un texto. Script1.sh: Realizar un script que pregunte tu nombre y muestre en pantalla un texto dándote la bienvenida: Script2.sh Realizar un script que nos pregunta una contraseña y a continuación se la mostramos en pantalla. La contraseña introducida, no debe aparecer en pantalla. 5.- Variables especiales. Paso de parámetros al script. $0: Nombre del script $#: Número de parámetros que le pasamos al script. $*: Representa todos los parámetros. $?: Guarda el código del último comando ejecutado. 0 Correcto Distinto de cero Fallo $1…….$9 Hace referencia al n-ésimo argumento de la línea de comandos. Script3.sh Rellena los huecos en el script para obtener el resultado esperado: #!/bin/bash echo “ El nombre de este script es: …..” echo “Se han introducido ….. parámetros” echo “El primer parámetro es ……..” echo “El segundo parámetro es ……” echo “Todos los parámetros son …..” En la línea de comandos se introduce: Sh script3.sh hola adios 2 Sistemas Informáticos Monousuario y Multiusuario 6.- Expresiones aritméticas. expr arg1 operación arg2 El resultado del comando es enviado a la salida estándar. Entre cada argumento y la operación debe haber un espacio, para que expr pueda distinguir los argumentos y su operando. Si queremos recoger el resultado en una variable: Z=`expr arg1 operación arg2` Operaciones: + suma - resta \* multiplicación / división % módulo Script4.sh Realizar un script que pregunte dos variables matemáticas, x e y. A continuación debe mostrar en pantalla las operaciones anteriores. 7.- Expresiones condicionales. Fotocopias. Notas: .- Hay que dejar un espacio después y antes de los corchetes. [ Expresión ] .- Hay que dejar espacios entre el operando y operadores. “A” == “B” .- [ ! Expresión ] Espacio después del !. Anula el valor de la expresión global. .- ! [ Expresión ] Espacios después del ! Ejercicio: Encuentra los errores, si es que los hay. 1.- [4 –eq 4] 2.- [ “José” -eq “José” ] 3.- [ 3 = 4] 4.- [ “José”=”José” ] 3 Sistemas Informáticos Monousuario y Multiusuario 8.- Instrucciones de programación condicionales. 8.1.- if Alternativa simple if [ condición ] then bloque fi Alternativa doble if [ condición ] then bloque 1 else bloque 2 fi Alternativa múltiple if [ condición 1 ] then bloque1 elif [condición 2 ] then bloque2 else bloque fi Script5.sh Realizar un script que nos pregunte el nombre de un fichero y nos indique si existe o no. En el caso de que exista, debe ordenarlo alfabéticamente. Como comprobación realiza un archivo de textos que se llame nombres y que contengan al menos cinco nombres, uno en cada línea. Script5a.sh Es una variante sobre el anterior. Ahora no le preguntamos el nombre del fichero. Se lo introducimos en la línea de comandos. Habrá que comprobar que se ha introducido el fichero. Nota: exit 1 –> Lo utilizaremos para salir del script. exit n sale del script con valor n En Ubuntu, sólo ponemos exit. 4 Sistemas Informáticos Monousuario y Multiusuario 8.2.- case Nos permite realizar menús. case $variable in Nota: valor1) Los paréntesis son obligatorios. bloque1 ;; Valor2) bloque2 ;; *) bloque por defecto ;; esac Script6.sh Realizar un script que muestre el siguiente menú. _________________________ Menú _______________________ 1.- Fecha actual. 2.- Calendario. 3.- Salir. 9.- Instrucciones de programación repetitivas. 9.1.- for for variable in conjunto do bloque done La variable irá tomando cada uno de los valores del conjunto. Para cada valor del conjunto se ejecutará el bloque. Nota: Los valores del conjunto se pueden dar de diversas formas: .- Separados por espacios. .- Líneas de un fichero. 9.2.- while while [ condición ] do bloque done Mientras que la condición sea verdadera, se repetirá el bloque. 5 Sistemas Informáticos Monousuario y Multiusuario Script7.sh Realizar un script que reciba como parámetros varios nombres separados por espacios. Debe saludar individualmente a cada uno. Script8.sh Es una variante del anterior. El nombre de los amigos se lo vamos a dar en un fichero. Creamos el siguiente fichero: Amigos: Ángel María Carmen 10.- Funciones. Definición de la función. Nombre_funcion () { Bloque } Llamada a la función. Nombre_función parámetros Ejemplo: Nombre_función hola adios $1 $2 Le hemos pasado a la función hola y adios. Esos dos parámetros son recogidos dentro de la función como $1 y $2. No debemos confundirlos con el $1 y $2 que se le pasa al script en la línea de comandos. La función debe estar creada antes de utilizarla. Las variables dentro de la función se consideran globales (al contracio que C). Para que una variable se considere local, ponemos: local variable Script9.sh Realizar un script que tenga una función llamada suma, que reciba dos numeros y nos muestre la suma. 11.- Diseño de un bucle. Vamos a diseñar un bucle controlado por centinela. LEER (variable) MIENTRAS (condición) BLOQUE LEER (variable) FIN-MIENTRAS 6 Sistemas Informáticos Monousuario y Multiusuario Script10.sh Diseñar el siguiente menú. _______________________ Menú _______________________ 1.- Fecha del sistema. 2.- Calendario. 3.- Salir. El menú se repetirá mientras que no se pulse salir. Crear una función para el menú. 12.- Variables de entorno. HOME PATH LOGNAME SHELL TERM HOSTNAME Directorio de trabajo del usuario Ruta donde se buscan los comandos. Nombres separados por : Nombre del usuario. Nombre completo de la shell. Tipo de Terminal que se está usando. Guarda el nombre del equipo. 7