Shell Script Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT • SHELL tiene dos formas distintas de ejecutar comandos : – Archivos binarios • Programas compilados y de los cuales existe un ejecutable • archivos .exe ó .com en MS-DOS – Archivos de texto • Contienen un programa escrito en el lenguaje del shell • archivos .bat en MS-DOS Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT • Para ejecutarlos, el usuario solamente debe digitar su nombre y el shell se encarga de ver como debe ser ejecutado. • El shell tiene primitivas de control de ejecución como por ej.: – sentencias condicionales – bucles. • La interpretación del lenguaje se lleva a cabo en tiempo real. • A medida que va interpretando, va ejecutando. Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT • Estos archivos deben tener permiso de ejecución para el usuario. chmod -u +x archivo chmod 7.. archvivo • Lo tiene que encontrar en el camino de búsqueda. Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT • El nombre comienza con / • Nombre absoluto de un archivo – /home/user/prog Nombre absoluto Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT • Es una palabra reservada – – – – – – – – – if then elif fi while do done for ! – – – – – – case in esac { } until Sistemas Operativos III - ITS – EMT - CETP Nombre absoluto Palabra Reservada Prof. L. Carámbula SHELL SCRIPT • Es un alias de otro comando • Ver alias, en presentación SHELL Nombre absoluto Palabra Reservada Alias Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT • Es un comando interno del núcleo – fg – read – test – umask – alias – history – return – trap – unalias – bg – jobs – unset – set – type – break – kill – cd Nombre absoluto – let – continue – logout Palabra Reservada – echo – pwd – exec – exit Comando interno Alias – export Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT • Es una función definida por el usuario – más adelante se verá como se definen las mismas. Nombre absoluto Palabra Reservada Función Comando interno Sistemas Operativos III - ITS – EMT - CETP Alias Prof. L. Carámbula SHELL SCRIPT • Busca en cada uno de los directorios contenidos en la variable PATH – ej: PATH = /bin:/usr/bin:/etc: – La variable PATH incluye actual Variable PATH , directorio Nombre absoluto Palabra Reservada Función Comando interno Sistemas Operativos III - ITS – EMT - CETP Alias Prof. L. Carámbula SHELL SCRIPT • Si no encuentra la orden ingresada en el camino de búsqueda, emite el mensaje de error correspondiente. Variable PATH Nombre absoluto Palabra Reservada Función Comando interno Sistemas Operativos III - ITS – EMT - CETP Alias Prof. L. Carámbula SHELL SCRIPT • Parámetros posicionales – son parámetros disponibles dentro del shell script como variables. – se ingresan a continuación del nombre. – se separan por espacios. – prog hola 5 pedro 7 juan 11 $0 $1 $2 $3 $4 $5 $6 Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT $0 el nombre del shell script que estamos ejecutando. $1 $2 $9 ${10} $# Primer parámetro posicional. Segundo parámetro posicional. Noveno parámetro posicional. Decimo parámetro posicional. Cantidad de parámetros que se han pasado al shell script. Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT $* • Un argumento que contiene a todos los parámetros que se han ingresado conjuntamente con el shell script ($1, $2, …) menos $0. • En forma de lista, separados por espacios. $@ $? Lo mismo que $* Almacena el código de error del último comando ejecutado. Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT $$ $! Número de proceso actual (PID) # COMENTARIO : Todo lo que haya escrito a la derecha, se toma como comentario. Almacena el código de error del último comando ejecutado en segundo plano Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •NOTA: #!/bin/bash • Esta línea se debe ingresar como primera línea de un shell script, de esta manera se identifica como tal. /bin/bash es la ruta donde se encuentra el interprete de comandos. Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT • Ejercicio: – Generar un archivo vi – Ingresar en vi: #!/bin/bash prueba.sh echo “El script se llama $0” echo “Cantidad de parametros es: $#” echo “El primero parametro es: $1” $* echo “Y todos son: ” echo “Fin - Shell Script” Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT • Ejercicio: – Una vez ingresado las líneas anterirores presionar: • ESC •: • wq – Guardar y salir –Colocar permiso de ejecución para el archivo creado: chmod –u +x prueba.sh Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Ejercicio: –Ejecutar el script de la siguiente manera: prueba.sh uno dos tres –Desplegará por pantalla: • El script se llama prueba.sh • La cantidad de parámetros es: 3 • El primero es: uno • Y todos son: uno dos tres • Fin - Shell Script Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Comando echo –Imprime por pantalla un literal en una línea • echo “Hola Linux” -n • No genera una nueva línea -e • Permite utilizar los caracteres de escape Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Comando echo –caracteres de escape \n \r \t \v nueva línea \b \a retroceso, backspace retorno de carro, primera línea tabulador horizontal tabulador vertical beep, campana Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Comando echo –caracteres de escape \ Oxx octal ascii de Oxx – ABC = $’\101\102\103\010’ – echo $ABC \“ \$ \\ comillas dobles, “ símbolo de pesos, $ contrabarra, \ Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Comando read – Lee caracteres del teclado hasta presionar <enter> – Los caracteres ingresados se almacenan en una variable. read numero -n número • Cantidad de caracteres a leer Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Comando read – Shell-script : read.sh ; – ejecutar como read.sh echo “ INGRESE SU NOMBRE? ” read nom echo “Hola $nom” Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula Aritmética en SHELL Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula Aritmética en SHELL –Tipo entero para una variable –se fija con el comando: typeset –i variable • o por base# para el valor. Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula Aritmética en SHELL •Ejemplo –La variable X es fijada a 5 en base 2 usando ambos formatos: typeset -i X=5 typeset -i X=2#101 echo $X » 5 Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula Aritmética en SHELL •Ejemplos – Se desea desplegar el valor de X en otra base, puede ser definida otra base con el comando typeset -in. • Ejemplo, redefinir X, X en base 3: typeset -i X echo $X » 3#12 Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula Aritmética en SHELL •El comando LET let “ < expresión-aritmética> ” ( ( < expresión-aritmética > ) ) –Donde las expresión aritmética puede contener: –constantes –operaciones –variables Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula Aritmética en SHELL •El comando LET –Asignar la suma de 1+1 a la variable X: let “X=1+1" echo $X » 2 –Luego puede ser incrementado: let “X=X+1" echo $X » 3 Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula Aritmética en SHELL •El comando (( ... )) –Asignar la suma de 1+1 a la variable X: (( X = 1 + 1 )) echo $X » 2 –Luego puede ser incrementado: (( X = X + 1 )) echo $X » 3 Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula Aritmética en SHELL •Operadores Aritméticos * Multiplicación / División % Módulo, resto de la división + Suma Resta Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula Aritmética en SHELL •Operadores Aritméticos X= 4 (( X = X % 2 )) echo $X » 0 Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula Aritmética en SHELL •Operadores Aritméticos *= Asignar Multiplicación /= Asignar División %= Asignar Módulo += Incrementar - = Disminuir Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula Aritmética en SHELL •Operadores Aritméticos X= 4 (( X *= 2 )) echo $X »8 Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula Aritmética en SHELL •Operadores Aritméticos –Expresiones lógicas ! && || Negación Lógica Y Lógico O Lógico Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula Aritmética en SHELL •Operadores de comparación <= < >= > == != Menor o igual que Menor que Mayor igual que Mayor que Igual que Distinto que Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula Estructuras de Control Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Condicional if <condición> then ... comandos ... else ... comandos ... fi Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Condicional –La condición puede escribirse como: let “<argumentos>” o ( ( <argumentos> ) ) Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Condicional if (( A > B )) then echo “$A es mayor que $B” else echo “$B es mayor que $A” fi Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Condicional read usuario if grep $usuario /etc/passwd then echo “$usuario es un usuario” else echo “$usuario no es un usuario” fi Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Condicional interactivo case variable in patron1) ... comandos ... ;; patron2) ... comandos ... ;; esac Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Condicional interactivo clear echo “1.- Usuarios conectados” echo “2.- Espacio utilizado” echo “3.- Procesos” echo “5.- Salir.” echo –n “Opción? : “ read opcion Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Condicional interactivo case $opcion in 1) who;; 2) df;; 3) ps;; 5) echo “Saliendo...”;; *) echo “Opción $opcion es incorrecta”;; esac Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Repetitivas while <condición> do ... comandos done – Ejecuta los comandos del bloque hasta que la condicion sea falsa. Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Repetitivas NUM=2 while (( NUM < 64 )) do echo -e “\t$NUM” ((NUM *= 2)) done Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Repetitivas until <condición> do ... comandos ... done • Se ejecuta al menos una vez los comandos del bloque Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Recorrer una lista for variable in <lista> do ... comandos ... done • Se ejecuta los comandos del bloque para cada valor de <lista> • variable adopta el valor del item de la lista Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Repetitivas for NOM in Ana Maria Jose Leo do echo -n $NOM done » AnaMariaJoseLeo Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Repetitivas # $@ contiene la lista de parametros for X in $@ do echo $X done Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Repetitivas –Procesar todas las líneas de un archivo for linea in $(cat /etc/passwd) do ... done – En la variable linea se almacena la línea del archivo, para cada interacción Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Comando test test “<argumentos>” [ [ <argumentos> ] ] – Condiciones con cadenas de caracteres – Condiciones con archivos Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Comando test [-n] string » largo != 0 -z string » largo = 0 s1 = s2 » s1 y s2 iguales s1 != s2 » s1 y s2 distintos Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Comando test –b –c –d –e –f archivo » Э de bloques archivo » Э de caracteres archivo » Э directorio archivo » Э archivo » Э regular Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Comando test –g –O –r –w –x archivo Э del grupo archivo Э del usuario archivo Э permiso lectura archivo Э permiso escritura archivo Э permiso ejecución Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Comando test – s archivo Э tamaño > 0 – z archivo Э tamaño = 0 Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Comando test a1 -ef a2 = dispositivo e i-nodo a1 -nt a2 a1 es más nuevo que a2 a1 -ot a2 a1 es más viejo que a2 Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula SHELL SCRIPT •Comando test -a y lógico -o o lógico Sistemas Operativos III - ITS – EMT - CETP Prof. L. Carámbula