Scripts - GNU/Linux
· Antonio Varas 666 · Providencia, Santiago, Chile · Fono: (562) 354 04 00 · Email:
[email protected] · WEb: www.duoc.cl
1
Scripts - Parámetros
El Shell ... •
Provee herramientas para manejo de variables. (Se vieron en el capítulo 11)
•
Permite utilizar herramientas para manejo de ciclos y para estructuras condicionales.
•
Además de recibir y manipular parámetros.
Parámetros ... •
Los scripts pueden recibir y manipular parámetros que son referenciados dentro de los Scripts como $1, $2, etc.
•
El conjunto de todos los parámetros está representado por $*.
•
La cantidad de parámetros está representada por $#.
•
El comando shift permite eliminar el primer parámetro de la lista, y correr todos los parámetros.
•
El comando set nos permite ver todas las variables de entorno. Pero además, nos permite asignarle valor a los parámetros. · Antonio Varas 666 · Providencia, Santiago, Chile · Fono: (562) 354 04 00 · Email:
[email protected] · WEb: www.duoc.cl
Scripts – Ejemplos Parámetros
Ejemplo 1: echo "Cantidad de parámetros: $#" echo "Primer parámetro: $1" shift echo "Segundo parámetro $1" shift echo "El resto de los parámetros $*" Ejemplo 2: set Viva GNU Linux echo "Primer parámetro: $1" echo "Segundo parámetro: $2" echo "Tercer parámetro: $3" · Antonio Varas 666 · Providencia, Santiago, Chile · Fono: (562) 354 04 00 · Email:
[email protected] · WEb: www.duoc.cl
Scripts – Estructuras de Control
IF: •
Permite ejecutar un conjunto de comandos solamente si se cumple una determinada condición.
•
La sintaxis es. if [ condicion ]; then comandos [else comandos] fi
•
El else es opcional.
•
Los corchetes [ ] en la condición son un comando en si mismo, también llamado test. – Para más información: man test. · Antonio Varas 666 · Providencia, Santiago, Chile · Fono: (562) 354 04 00 · Email:
[email protected] · WEb: www.duoc.cl
Scripts – Estructuras de Control (Cont.)
IF (Cont): •
Permite ejecutar un conjunto de comandos solamente si se cumple una determinada condición.
•
Las condiciones pueden ser: comando test, otros programas que devuelvan un 0 ó 1, o true o false.
•
Las condiciones serán de este estilo: – !condicion: Si condición es falsa. – condicion1 -a condicion2: Las dos condiciones son verdaderas. – condicion1 -o condicion2: Una de las dos condiciones es verdadera. – cadena-de-caracteres: La cadena no esta vacía. – -z cadena-de-caracteres: La cadena esta vacía. – cadena = cadena: Las dos cadenas son iguales. – cadena != cadena: Las cadenas son distintas. – entero -eq entero: Los enteros son iguales. · Antonio Varas 666 · Providencia, Santiago, Chile · Fono: (562) 354 04 00 · Email:
[email protected] · WEb: www.duoc.cl
Scripts – Estructuras de Control - Ejemplo IF Ejemplo IF: Envía un mensaje indicando si hay 1 o más usuarios conectados. cuantos=‘who | wc -l‘ if [ \$cuantos -gt 1 ]; then echo "Hay más de un usuario conectado" else echo "Sólo tú estás conectado" fi Comentarios: •
Primero se guarda la cantidad de usuarios conectados al sistema en la variable cuantos. – Ojo con las comillas por que nos permite utilizar la salida de los comandos en nuestro código
•
Luego utilizamos la estructura de if para compararlo con 1, la opción -gt del comando test significa mayor que. · Antonio Varas 666 · Providencia, Santiago, Chile · Fono: (562) 354 04 00 · Email:
[email protected] · WEb: www.duoc.cl
Scripts – Estructuras de Control (Cont.)
FOR: •
Es una estructura que permite una iteración durante un número determinado de veces.
•
La sintaxis es: for variable in lista; do comandos done
•
La variable, cuando se la coloca al lado del for, no lleva el signo $ adelante, pero si en los comandos se hace referencia a ella, se debe escribir $variable.
•
La lista puede ser: – Una lista de números. Ej: 1 2 3 4 – Una lista de archivos. Ej: *.java – Una lista de argumentos. Ej: $* · Antonio Varas 666 · Providencia, Santiago, Chile · Fono: (562) 354 04 00 · Email:
[email protected] · WEb: www.duoc.cl
Scripts – Estructuras de Control (Cont.)
FOR: •
Es una estructura que permite una iteración durante un número determinado de veces.
•
La sintaxis es: for variable in lista; do comandos done
•
La variable, cuando se la coloca al lado del for, no lleva el signo $ adelante, pero si en los comandos se hace referencia a ella, se debe escribir $variable.
•
La lista puede ser: – Una lista de números. Ej: 1 2 3 4 – Una lista de archivos. Ej: *.java – Una lista de argumentos. Ej: $* · Antonio Varas 666 · Providencia, Santiago, Chile · Fono: (562) 354 04 00 · Email:
[email protected] · WEb: www.duoc.cl
Scripts – Estructuras de Control (Cont.)
WHILE: •
Es una estructura que permite una iteración hasta que una determinada condición no se cumpla.
•
La sintaxis: while [ condicion ]; do comandos done
•
Con respecto a la condición, es equivalente a la del if. while [ "$*" ]; do echo $1 shift done
•
Ojo que while espera sólo un parametro por ello las “”. · Antonio Varas 666 · Providencia, Santiago, Chile · Fono: (562) 354 04 00 · Email:
[email protected] · WEb: www.duoc.cl
Scripts – Estructuras de Control (Cont.)
CASE: •
Es una estructura que permite realizar distintas acciones según el valor de una determinada variable.
•
La sintaxis: case $variable in patron1) comandos ;; patron2) comandos ;; esac
•
Con respecto al patrón: – Es similar a los metacaracteres utilizados por Shell: · Antonio Varas 666 · Providencia, Santiago, Chile · Fono: (562) 354 04 00 · Email:
[email protected] · WEb: www.duoc.cl
Scripts – Estructuras de Control (Cont.)
CASE: (Cont.) •
Con respecto al patrón: (Cont.) – Es similar a los metacaracteres utilizados por Shell: (Cont.) • • • • • •
•
* referencia a cualquier cadena. ? referencia a caracter. [ ] referencia a un rangos. \ permite escapar valores especiales. ’ ’ permite escapar cadenas completas. | permite realizar un o (OR).
Ejemplo de Case: Modificar funcionamiento del comando “cal”. – Cal nos permite visualizar calendarios. • Por defecto nos permite ver el calendario del mes actual. • Si agregamos un número, nos muestra el calendario de ese año. • Si le agregamos 2 parámetros, nos muestra el calendario de ese año en ese mes. · Antonio Varas 666 · Providencia, Santiago, Chile · Fono: (562) 354 04 00 · Email:
[email protected] · WEb: www.duoc.cl
Scripts – Estructuras de Control (Cont.)
CASE: (Cont.) •
Ejemplo de Case: Modificar funcionamiento del comando “cal”. (Cont.) – Problemas de cal: • No entiende nombres de meses (enero, febrero, etc). • Al ejecutar cal 10 la salida será el calendario del año 10, no del mes 10 del año actual, que es lo que esperaríamos. – Solución: • Realizar un Script que permita obtener un nuevo comando (nuevocal) que tenga estas funcionalidades.
•
Ver Solución.
case $# in 0) set ‘date‘ # Si no vino ningún parámetro, m=$2 # mostramos el calendario del mes actual y=$6 # y del año actual. ;; · Antonio Varas 666 · Providencia, Santiago, Chile · Fono: (562) 354 04 00 · Email:
[email protected] · WEb: www.duoc.cl
Scripts – Estructuras de Control (Cont.) CASE: (Cont.) •
Solución: 1) m=$1 # Si vino un sólo parámetro, set ‘date‘ # mostramos el calendario de ese mes y=$6 # y del a~no actual. ;; 2) m=$1 # Si vinieron dos parámetros, y=$2 # mostramos el calendario de ese mes y a~no. ;; esac case $m in jan*|Jan*|ene*|Ene*) m=1 ;; feb*|Feb*) m=2 ;; mar*|Mar*) m=3 ;; apr*|Apr*|abr*|Abr*) m=4 ;; · Antonio Varas 666 · Providencia, Santiago, Chile · Fono: (562) 354 04 00 · Email:
[email protected] · WEb: www.duoc.cl
Scripts – Estructuras de Control (Cont.) CASE: (Cont.) •
Solución: (Cont.) may*|May*) m=5 ;; jun*|Jun*) m=6 ;; jul*|Jul*) m=7 ;; aug*|Aug*|ago*|Ago*) m=8 ;; sep*|Sep*) m=9 ;; oct*|Oct*) m=10 ;; nov*|Nov*) m=11 ;; dec*|Dec*|dic*|Dic*) m=12 ;; [1-9]|10|11|12) ;; # El mes era numérico. *) y=$m; m=""; # Sólo vino el año. esac # Llamamos al calendario con el mes que elegimos. cal $m $y · Antonio Varas 666 · Providencia, Santiago, Chile · Fono: (562) 354 04 00 · Email:
[email protected] · WEb: www.duoc.cl
Scripts – Estructuras de Control (Cont.) Funciones •
Una función es un conjunto de instrucciones encerradas en un bloque de código, es una caja negra que hace determinado trabajo.
•
Deben ser declaradas antes de poder llamarlas, y para llamarlas alcanza con tipear su nombre.
•
Sintaxis: # declaracion de funcion funcion () { comandos } # declaracion alternativa. function funcion { comandos } funcion # Llamado a funcion · Antonio Varas 666 · Providencia, Santiago, Chile · Fono: (562) 354 04 00 · Email:
[email protected] · WEb: www.duoc.cl
Scripts – Estructuras de Control (Cont.) Funciones (Cont.) •
Reciben sus parámetros en $1, $2, $*, etc.
•
Devuelven valores entre 0 y 255. – Instrucción return. – El valor que devuelven puede ser accedido en el script en la variable $?. – Normalmente, las funciones acceden a variables globales, para poder usar locales se debe usar la instrucción de shell local.
•
Ejercicio: – Desarrollar una calculadora que sume, multiplique y divida. – Ver solución.
· Antonio Varas 666 · Providencia, Santiago, Chile · Fono: (562) 354 04 00 · Email:
[email protected] · WEb: www.duoc.cl
¿Consultas?
· Antonio Varas 666 · Providencia, Santiago, Chile · Fono: (562) 354 04 00 · Email:
[email protected] · WEb: www.duoc.cl
17