2. Comandos específicos del bash
Un mecanismo muy útil es el de ejecutar procesos en lo que se llama modo
background este modo indica sencillamente que el proceso se está ejecutando, pero
que el Shell nos devuelve la línea de comandos para poder seguir ejecutando otros
programas. Para indicarle esto al bash, debemos escribir el carácter “&” después del
comando o programa que vamos a ejecutar. Una vez se ha lanzado el proceso en
modo background, se muestra una línea donde se nos indica el número de trabajo y
PID del proceso lanzado.
Con el comando Jobs podemos ver qué procesos están lanzados en modo
background
(Pasando el parámetro “–l” también podremos ver su PID). Si quisiéramos pasar
uno de estos procesos a modo foreground (como si lo hubiéramos lanzado desde la
línea de comandos sin el carácter “&”), podemos utilizar el comando fg indicando el
PID del proceso. También existe bg, que nos envía un determinado proceso a modo
background
Este último es útil cuando, por ejemplo, ejecutamos un programa en modo
foreground y lo pausamos con CTRL+Z. Si después ejecutamos bg indicándole su
PID, el proceso continuará su ejecución en modo background
3. Los procesos también tienen una jerarquía de padres a hijos. Cuando ejecutamos
algún programa en modo background no estamos interfiriendo en esta jerarquía, de
modo que si salimos de la sesión, todos estos procesos se acabará porque el padre (el
intérprete de comandos desde donde los hemos lanzado) ya no estaría en ejecución.
Si queremos desvincular un proceso de su padre podemos utilizar disown.
Otro mecanismo muy útil del bash es la historia de comandos. Es normal que
utilizando el sistema debamos repetir muchas instrucciones escritas anteriormente.
Con las teclas del cursor arriba y abajo podemos ir viendo todos los comandos que
hemos ido utilizando y repetir alguno apretando RETURN.
También podemos utilizar History, conel cual se mostrarán por pantalla todos los
comandos ejecutados, enumerados según su aparición. Escribiendo “! NUM” se
ejecutará el que se corresponda con esta historia. También podemos escribir “!”
seguido de las letras iniciales de algún programa ejecutado anteriormente y el
programa buscará el más reciente para ejecutarlo.
4. El bash dispone, asimismo, de teclas de acceso rápido que nos permiten ejecutar
ciertas acciones sin ni siquiera escribirlas. Algunas de las más frecuentes son:
• TAB: no es necesario escribir el nombre de un fichero, directorio o comando
enteramente. Si escribimos los primeros caracteres y después apretamos la tecla del
tabulador nos acabará de escribir el resto. Si hubiera más de una coincidencia nos
mostraría las diferentes posibilidades.
• CTRL+L: limpia la pantalla (igual que el comando clear)
• SHIFT+REPÁG: enseña media pantalla anterior.
• SHIFT+AVPÁG: enseña media pantalla posterior.
• CTRL+W: elimina la última palabra escrita.
• CTRL+T: intercambia el orden de los últimos caracteres.
• CTRL+U: borra todos los caracteres anteriores al cursor.
• CTRL+D: sale del intérprete de comandos (equivalente a hacer un logout).
• Ulimit es un comando que nos permite configurar algunos delos aspectos internos
relacionados con el bash. Por ejemplo, permite indicar la cantidad de memoria que
puede utilizar el intérprete de comandos, el número máximo de archivos que se
pueden abrir, etc. Este comando puede servirnos para restringir un poco las acciones
que pueden hacer los usuarios de nuestro sistema (en caso de administrar servidores
con muchos usuarios).
5. Shell scripts con bash
Los shell scripts son ficheros donde escribimos una serie de comandos para que
sean ejecutados. Aunque su sintaxis puede llegar a ser muy compleja y tendríamos
que entrar en aspectos de programación para entenderla claramente.
Como en todo lenguaje de programación, podemos utilizar variables, estructuras
condicionales y bucles. Para declarar una variable utilizaremos la siguiente sintaxis:
(Nombre Variable=contenido)
Si el contenido es una cadena de caracteres, debemos ponerlo entrecomillas, si es un
número, no hace falta poner nada y si queremos guardar en la variable la salida de
un comando, deberíamos ponerlo entre caracteres. Para referirnos al contenido de
la variable en otras instrucciones, siempre debemos preceder al nombre con
el carácter“$”. Para las instrucciones condicionales podemos utilizar las siguientes
estructuras:
(If condición; then instrucciones else instrucciones fi)
6. donde condición puede hacer referencia a un archivo, realizar alguna operación de
comparación aritmética (entre caracteres “(())”), etc. De especial utilidad es
el comando test, que nos permite hacer comprobaciones de
archivos, directorios, etc. y nos devuelve un booleano. De este modo, por
ejemplo, si quisiéramos realizar una acción u otra según si existiera un
determinado archivo, podríamos utilizar la siguiente estructura:
If test -f /etc/inittab; then echo
“El fichero inittab existe.”
else
echo “El fichero inittab NO existe.”fi
7. Otra estructura condicional es la de selección:
Si no se encontrara ninguna, se pasaría a la sección“*)”, que es opcional.
Esta estructura es muy buena cuando, por ejemplo, queramos que
un determinado script haga unas acciones u otras según el parámetro que
le pasemos. Los parámetros los podemos referenciar a partir de “$1” para el
primero, “$2” para el segundo y consecutivamente. Para los bucles podemos
utilizar alguna de las siguientes estructuras:
#BUCLE TIPO FOR for i in lista; do instrucciones done
#BUCLE TIPO WHILE while condición; do instrucciones done
Naturalmente, antes de poder ejecutar un Shell script debemos dar el permiso
de ejecución al fichero correspondiente (comando chmod750 nombre Fichero).