Saludos pequeños seres navegantes. Aquí una nueva entrada sobre scripting básico sobre GNU/Linux utilizando la shell bash.
Los scripts no son mas que archivos que contienen comandos del sistema operativo e instrucciones que nos brinda la shell sobre la que trabajamos. La shell más utilizada en GNU/Linux es la llamada Bash.
Cuando creamos un script en GNU/Linux utilizando Bash, el sistema operativo nos ofrece la posibilidad de utilizar todos sus comandos dentro de nuestro script (ls, rm, cp, cat) y la shell Bash nos ofrece instruciones como while, if, if else, for, además de permitirnos crear variables para almacenar información.
Por lo tanto, un script para nuestro cometido es una conjunción de comandos GNU/Linux junto con controles de flujo y variables sobre Bash.
Cuando creamos un script, debemos SIEMPRE indicar en la primera línea del archivo el tipo de shell que queremos usar. Para esto, usaremos la almoadilla con exclamación (#!) seguida de la ruta donde se encuentra la shell:
#!/bin/bash
No me vale ponerlo en la segunda linea, si digo que en la primera linea, es en la primera linea. De lo contrario, golpe de remo ¿eh?
Bien, una vez hecho esto, el resto del archivo estará destinado a nuestro script. Lo primero que vamos a hacer es crear una variable con información y luego mostrar el contenido de dicha variable con un echo.
#!/bin/bash variable="caraculo" echo $variable
Nótese que las variables en bash se crean sin usar el símbolo $ pero cuando queremos acceder a su contenido, le ponemos un $ delante. Nótese también, que en bash no usamos punto y coma (;) al final de cada instrucción.
El echo en bash funciona de forma similar a como funciona en php. Cuando queremos mostrar una sóla variable, prescindimos de comillas. Cuando queremos mostrar texto y una variable; entonces las usamos:
#!/bin/bash variable="kkfuti" echo "la variable contiene $cacafuti"
En php, usabamos puntos para separar texto de variable, en bash prescindiremos de éstos. La tarea se simplifica:
#!/bin/bash variable="tikitiki" echo "El contenido " $tikitiki " esta almacenado en variable"
Control de flujos con if
La forma de utilizar if en bash es algo mas engorrosa que en php (o C por consecuencia), pero os voy a enseñar un truquito para poder usar la misma sintáxis. Esto es, los dobles parentesis.
#!/bin/bash variabletexto="hola" variablenumero=9 if (( $variabletexto == "hola" ));then echo "la variabletexto contiene hola" fi if (( $variablenumero > 5 ));then echo "la variablenumero es mayor que 5" fi
Gracias al truquito if (( condicion ));then podemos usar la sintáxis que aprendímos en php. Recordad que if se cierra con fi (if al revés) y entre estos se aloja el código que se ejecutará si la condición entre los dobles parentesis es cierta (1).
Para comprobar si un archivo o un directorio existe, hay que modificar el truco de antes y reemplazar los parentesis por un «[» y un «]» (corchetes) y usar las expresiones condicionales:
#!/bin/bash if [ -f "/etc/resolv.conf" ];then echo "el archivo existe" fi if [ -d "/etc/" ];then echo "el directorio existe" fi
Cuidado con esto: las expresiones contenidas dentro de los corchetes DEBEN estar separadas por espacios de los dichos corchetes. De lo contrario fallará.
Ni que decir tiene que podemos usar el método aprendido en clase ayudados del comando brindado por el sistema operativo; test:
#!/bin/bash if test -f "/etc/resolv.conf" then echo "el archivo existe" fi if test -d "/etc/" then echo "el archivo existe" fi
Recordad, -f para archivos (file) y -d para directorios (directory).
Antes de terminar, comentar que bash también permite el uso de if else. (si la condición es cierta ejecuta esto, de lo contrario, ejecuta esto otro). Su uso es muy sencillo:
#!/bin/bash variable="hola" if (( $variable == "hola" ));then echo "La variable contiene hola, condicion cierta" else echo "La variable NO contiene hola, condicion falsa" fi
Observad que añadiendo la palabra else entre un código y otro, podemos controlar cual ejecutar dependiendo de si la condición es cierta (1) o falsa (0).
Y hasta aquí la primera entrega de Bash Scripting Básico. Continuará… x)
Muy bueno, te quiero