Contenido |
Los Scripts de Bash deben tener siempre como primera linea del guión el texto, para que el Sistema Operativo ejecute la acción usando el programa Bash.
#!/bin/bash
Una vez escrito el Script y guardado en el disco en alguno de los directorios "bin" con el nombre y permiso de ejecución apropiados, se invoca, escribiendo en la consola el nombre del guión. Si el guión tiene una interfaz gráfica se invoca como otro programa cualquiera, uno o dos clic sobre el guión o su icono. Este puede escribirse en cualquiera de los editores de texto de Linux, por ejemplo Kwrite y será ya un guión funcional cuando se salve a alguno de los "bin".
Nota: Es buena práctica cuando se escribe un guión salvarlo apenas se hayan escrito las primeras línea para ir comprobando su funcionamiento e ir corrigiendo los problemas.
Es impensable elaborar Scripts de Bash sin el uso de las variables. Una variable es una estructura de texto (una letra, un número o sucesiones de ellos) que representa alguno de los elementos que varían en valor y/o significado en el entorno de la Shell, sirviendo como elemento básico de entrada/salida de valores a y desde los comandos en su ejecución consecutiva. Para invocar una variable se utiliza el carácter especial $ precediendo al nombre de la variable.
Exixten dos tipos de variables:
Estas son elaboradas por defecto por el propio Bash y son:
Nombre del guión
Variables que almacenan los n argumentos (opciones) proporcionados al comando.
Variable que contiene el total de los argumentos proporcionados.
Conjunto de los argumentos.
Valor de ejecución del comando anterior, si es cero es que el comando anterior se ejecutó sin errores, de lo contrario hubo algún error.
Identifica el proceso del guión.
Identifica el último proceso arrancado en el trasfondo (background).
Las variables pueden ser creadas en cualquier momento, pero siempre antes de su utilización de manera muy simple, se escribe:
nombre_variable=valor_variable
en cualquier momento posterior a la creación si se coloca $nombre_variable dentro del entorno de la Shell el sistema colocará allí valor_variable.
SALUDO=Bienvenido
En cualquier momento posterior si se pone $SALUDO, Bash colocará ahí Bienvenido.
Una variable también puede ser la salida de un comando si ponemos al principio y final del mismo un acento invertido.
SALIDA=`comando`
le indicará al sistema que donde se escriba $SALIDA debe poner la salida de ese comando. Es práctica común utilizar mayúsculas para las variables a fin de identificarlas fácilmente dentro del guión.
Cuando se ejecutan Scripts que pueden ser "hijos" de otro guión en ocasiones es necesario exportar las variables, esto se hace escribiendo;
export nombre_variable
Existe un grupo de caracteres especiales (también llamados meta caracteres) que tienen significado propio para Bash. Algunos son:
Le indica a Bash que ignore el carácter especial que viene después.
Cuando se encierra entre comillas dobles un texto o una variables si esta es una frase (cadena de palabras) Bash lo interpretará como una cadena única.
Identifica que lo que le sigue es una variable.
Las comillas simples se usan para desactivar todos los caracteres especiales encerrados dentro de ellas, así tenemos que si escribe '$VARIABLE' Bash interpreta literalmente lo escrito y no como variable.
Cuando se coloca este carácter dentro de una linea del guión, Bash ignora el resto de la linea. Muy útil para hacer comentarios y anotaciones o para inhabilitar una linea de comandos al hacer pruebas.
Este carácter se usa para separar la ejecución de distintos comandos en una misma linea de comandos.
Se utiliza como se explicó en el punto anterior, para convertir la salida de un comando en una variable. El comando en cuestión se ejecuta en una sub shell.
También están |, (), !, >, <, cuyo significado se verá mas adelante. El espacio es otro carácter especial y se interpreta por bash como el separador del nombre del programa y las opciones dentro de la linea de comandos, por esta razón es importante encerrar entre comillas dobles el texto o las propias variables cuando son una frase de varias palabras.
Otro carácter que debe evitarse en lo posible su uso es el guión (-) ya que para la mayoría de los programas se usa para indicarle al propio programa que lo que sigue es una de sus opciones, de manera tal por ejemplo, si usted crea un archivo con nombre -archivo (en caso que pueda) después será difícil borrarlo ya que rm (programa que borra) tratará el archivo como una de sus opciones (al "ver" el Script) y dará de error algo así, "Opción -archivo no se reconoce".
Hay un grupo de palabras que tienen significado especial para bash y que siempre que se pueda deben evitarse cuando se escriben lineas de comandos para no crearle "confusiones" algunas son: exit, break, continue, true, false, return etc... cuyo significado es mas o menos así:
Se sale del guión
Se manda explícitamente a salir de un ciclo
Se manda explícitamente a retornar en un ciclo
Como exit pero solo se sale del comando u operación sin cerrar el guión
Indica que una condición es verdadera
Indica que una condición es falsa
Bash como programa tiene algunos argumentos útiles y propios que se usan con frecuencia en la elaboración de Scripts en los condicionales vinculados a la determinación de elementos sobre los archivos, variables, cadenas de palabras o cadenas de pruebas, los mas comunes son:
| Argumentos de Archivos | Cierto si.... (salida 0) |
|---|---|
| -d | Archivo existe y es un directorio |
| -c | Archivo existe y es de caracteres |
| -e | Archivo existe |
| -h | Archivo existe y es un vínculo simbólico |
| -s | Archivo existe y no está vacío |
| -f | Archivo existe y es normal |
| -r | Tienes permiso de lectura del archivo |
| -w | Tienes permiso de escritura en el archivo |
| -x | Tienes permiso de ejecución del archivo |
| -O | Eres propietario del archivo |
| -G | Perteneces al grupo que tiene acceso al archivo |
| -n | Variable existe y no es nula |
| Archivo1 nt Archivo2 | Archivo1 es mas nuevo que Archivo2 |
| Archivo1 -ot Archivo2 | Archivo1 es mas viejo que Archivo2 |
| Agumentos de cadenas | Cierto si |
|---|---|
| -z | La cadena está vacía |
| -n | La cadena no está vacía |
| cadena1 = cadena2 | Si las cadenas son iguales |
| cadena1 != cadena2 | Si las cadenas son diferentes |
| cadena1 < cadena2 | Si la cadena 1 va antes en el orden lexicográfico |
| cadena1 >cadena2 | Si la cadena 1 va despues en el orden lexicográfico |
En algunas ocasiones será necesario leer ciertas variables desde el teclado o imprimirlas a la pantalla, para imprimir a la pantalla se pueden invocar dos programas en la linea de comandos:
(que es un echo mejorado)
Y para leer desde el teclado se usa:
Si hacemos un read sin asignar variable, el dato de almacena en $REPLY una variable del sistema. Tanto el comando echo como read tienen sus propias opciones.
Ejemplos:
VARIABLE=`comando` echo "$VARIABLE"
La palabra $VARIABLE está puesta entre comillas dobles para que se imprima todo el texto ignorando los espacios entre palabras.
read PREGUNTA
habremos creado una variable de nombre PREGUNTA así es que si luego ponemos
echo "$PREGUNTA"
Se imprimirá a la pantalla lo que se escribió en el teclado al presionar la tecla Enter.
Con los elementos tratados hasta aquí ya podemos escribir nuestros primeros guiónes
Guión 1
#!/bin/bash echo Hola mundo
Cuando se corre este guión se imprimirá a la pantalla Hola mundo
Guión 2 Lo mismo usando una variable
#!/bin/bash VARIABLE=Hola mundo echo "$VARIABLE"
Nótese la variable entre comillas dobles para que imprima todo el texto.
Guión 3 Cuando se usan mas de una variable
#!/bin/bash VARIABLE=Hola SALUDO=mundo echo "$VARIABLE""$SALUDO"
En los tres casos se imprimirá a la pantalla Hola mundo
Guión 4 Si se usan caracteres especiales la cosa puede cambiar
#!/bin/bash VAR=auto echo "Me compré un $VAR" Imprimirá Me compré un auto echo 'Me compré un $VAR' Imprimirá Me compré un $VAR echo "Me compré un \$VAR" Imprimirá Me compré un $VAR
Note como las comillas simples y el carácter \ hacen que Bash ignore la función del carácter especial $. Siempre las comillas simples harán que se ignore todos los meta caracteres encerrados entre ellas y \ solo el que sigue después.