Tema I Intérprete de comandos: Bash (Revision : 1,2) Herramientas de Programación. 19 de noviembre de 2004 Resumen Intérprete de comandos desde el punto de vista del programador. Dpto. Lenguajes y Sistemas Informáticos Universidad de Alicante DLSI H.P.: Tema I: Intérprete de comandos: Bash - Revision : 1,2 Tipos de shells Shell empleado: bash . Existen otros: csh, ksh , etc. . . login shell: --login. Lee —en este orden— /etc/profile, ~/.bash profile, ~/.bash login, ~/.profile, ~/.bash logout. interactive shell: Lee ~/.bashrc. DLSI 1 H.P.: Tema I: Intérprete de comandos: Bash - Revision : 1,2 Palabras reservadas El intérprete de comandos dispone de su propio lenguaje de programación. Con él podemos realizar los shell scripts. Este lenguaje reserva. . . : • Palabras : ! case do done elif else esac fi for function if in select then until while { } time [[ ]] • Metacaracteres : 1 | & ; ( ) < > space tab. • Operador de control : || & && ; ;; ( ) | <newline>. 1 Separan palabras si no están entrecomillados. DLSI 2 H.P.: Tema I: Intérprete de comandos: Bash - Revision : 1,2 Personalización del teclado Podemos asociar acciones a diversas teclas o combinaciones de teclas. Estas se definen en el fichero ˜/.inputrc Por ejemplo: $ cat ˜/.inputrc Meta-d: kill-word Control-e: "emacs & ˆM" # set meta-flag on ←− Es un comentario. Las definiciones de teclas se pueden leer con: bind -f ~/.inputrc. DLSI 3 H.P.: Tema I: Intérprete de comandos: Bash - Revision : 1,2 Redirección de E/S: [I] La redirección de la salida estándar la realizan: >, >>. La redirección de la entrada la realiza: <. La conexión de la salida de un proceso con la entrada de otro la realiza: |. DLSI 4 H.P.: Tema I: Intérprete de comandos: Bash - Revision : 1,2 Redirección de E/S: [II] Podemos redireccionar la salida de error a un fichero: incluso, a un descriptor de fichero p1 2 > prueba o, 2 > &1 . Si se redirigen ambas a la vez, el orden es importante, no es lo mismo ls > dirlist 2 > &1 2 que ls 2 > &1 >dirlist . 2 Se abrevia de esta manera DLSI ls &> dirlist . 5 H.P.: Tema I: Intérprete de comandos: Bash - Revision : 1,2 Control de procesos: [I] Podemos lanzar procesos en primer plano y segundo plano: &. Para alternar un proceso entre primer y segundo plano disponemos de los comandos: fg, bg, jobs. Un proceso en primer plano se puede ‘dormir’ mediante: ˆZ. Procesos en funcionamiento: top, ps, pstree. DLSI 6 H.P.: Tema I: Intérprete de comandos: Bash - Revision : 1,2 Control de procesos: [II] Uso de nohup combinado con &. Podemos enviar señales a los procesos con: kill, killall. DLSI 7 H.P.: Tema I: Intérprete de comandos: Bash - Revision : 1,2 Control de recursos El intérprete de comandos puede controlar algunos recursos disponibles para él mismo y para los procesos que ponga en marcha. Esto se gestiona mediante la orden: ulimit [-SHacdflmnpstuv] [limit]. Podemos controlar: tamaño de los ficheros core, número máximo de ficheros abiertos, etc. . . . DLSI 8 H.P.: Tema I: Intérprete de comandos: Bash - Revision : 1,2 Shell scripts: [I] Son ‘programas’ escritos en el lenguaje de programación del shell. Admiten comentarios en sus lı́neas a partir del carácter: #. Se pueden ejecutar pasándolos como parámetros al propio shell: sh mi-guion.sh3 3 No es necesaria la extensión .sh. DLSI 9 H.P.: Tema I: Intérprete de comandos: Bash - Revision : 1,2 Shell scripts: [II] Pero también podemos poner en su primera lı́nea, en un comentario especial, el ‘camino’ hasta el programa que los debe interpretar, dotar de permisos de ejecución al fichero con el shell-script y ejecutarlo: #! /bin/sh # El intérprete se indica en la primera lı́nea. echo hola. Esto mismo es aplicable para cualquier intérprete, p.e. perl: #! /usr/bin/perl # Esto es un guión, similar al anterior, escrito en perl. print "hola\n" DLSI 10 H.P.: Tema I: Intérprete de comandos: Bash - Revision : 1,2 Shell scripts: [III] Se pueden definir funciones: [ function ] nombre () { lista de comandos; } Por ejemplo: function hora () { echo La hora es: $(date). } A los parámetros de la función se accede mediante las variables especiales: $1...$n. También se pueden crear alias alias ll=’ls -l --color’ DLSI para comandos habituales: , y eliminarlos con unalias . 11 H.P.: Tema I: Intérprete de comandos: Bash - Revision : 1,2 Ficheros en lı́nea: [I] Se llaman también here documents . Son una forma especial de redirección: <<[-] EOF fichero en linea EOF DLSI 12 H.P.: Tema I: Intérprete de comandos: Bash - Revision : 1,2 Ficheros en lı́nea: [II] Por ejemplo: cat << FIN Fichero con dos lineas de texto solo. FIN DLSI 13 H.P.: Tema I: Intérprete de comandos: Bash - Revision : 1,2 Búsqueda de comandos El shell dispone de una ‘pila’ con los últimos comandos ejecutados. Nos movemos por ella con los cursores ↑ y ↓. También podemos ‘buscar’ un determinado comando con la combinación de teclas ˆr, y comenzando a teclear el comando buscado. El shell irá mostrando los comandos anteriores que coinciden con lo tecleado hasta ahora. Una vez aparezca el buscado, bastará con pulsar enter. DLSI 14