Manual rápido de programación en Bash

Bueno, en este tutorial voy a tratar de explicar los conceptos básicos de bash scripting ya que nos puede facilitar la vida.

Para comenzar a realizar un programa en bash hacemos desde nuestro terminal vim script.sh
La primera linea del programa siempre será la misma “#!/bin/bash” esto indicará a nuestro script cuando lo ejecutemos que se trata de bash para que pueda ejecutarlo.
En bash las variables no se declaran, simplemente las utilizamos según lo necesitamos, por ejemplo:

x=freelogs

En cuanto a copiar variables de unas a otras, hay que tener un poco de cuidado ya que si hacemos:

<x=freelogs
y=x

Al mostrar el valor de x obtendremos como resultado “y” para poder solucionar este inconveniente, utilizamos el caracter $ de forma que:

x=freelogs
y=$x

Ahora y tiene el valor “freelogs” exactamente igual que x ;)

Cuando queremos programar en bash podemos utilizar instrucciones como read o echo. La primera (read) es la encargada de leer las entradas por teclado mientras que echo lo muestra por pantalla. Por ejemplo:

#!/bin/bash
read var1 var2
echo var1
echo var2

(Lo podeis guardar y haceis chmod +x programa1 y para ejecutarlo ./programa1)

Este sencillo programa leerá la cadena de la siguiente forma:
La entrada del programa en ejecución sería:

hola mundo cruel
hola
mundo cruel

Aquí podemos observar que var1 guardará la primera palabra y la variable2 todo lo demás, de forma que si existiesen más variables se irían guardando el resto del texto en ellas
Algo muy util sería por ejemplo asignar a variables expresiones por ejemplo:

#!/bin/bash
parametro=*.txt
cd /home/arwest
ls $parametro

Esto nos permitiría hacer un ls *.txt del directorio “/home/arwest” de forma que con variables podemos controlar los parámetros de forma cómoda ;)

En bash hay tres tipos de comillas las simples (‘), dobles (“) y la comilla invertida (`)
(‘) -> Sirve para coger las cosas literalmente de forma que:

var1=5
var2=’5$var1’

Así var1 mostrará 5 mientras que var2 mostrará 5$var1

(“)->Sirve para sustituir valores
var1=5
var2=”4$var1”

Donde var2 mostrará 45

(`) ->Será la que nos de la salida de las instrucciones

var=`ls -l| wc -l`
Var almacenará el numero de archivos del directorio. Por lo tanto deducimos que si ls muestra el numero de ficheros wc -l los contará :P

En cuanto a condiciones hay que saber que no existen el valor TRUE y FALSE en bash así que se utilizará el 1 y 0 respectivamente

Operadores para el manejo de ficheros:

Operador Significado
-f Si fichero es un fichero ordinario
-d Si fichero es un directorio
-r Si el proceso tiene permiso de lectura sobre fichero
-w Si el proceso tiene permiso de escritura sobre fichero
-x Si el proceso tiene permiso de ejecución sobre fichero
-s Si fichero tiene una longitud mayor que cero

Operadores para el manejo de ristras

Operador Significado
= (binario) Si operando1 es igual a operando2
!= (binario) Si operando1 es distinto de operando2
-z (unario) Si operando es una ristra nula
-n (unario) Si operando es una ristra no nula

Operadores para el manejo de números

Operador Significado
-eq operando1 y operando2 son iguales
-ne operando1 y operando2 son distintos
-gt operando1 es mayor estricto que operando2
-ge operando1 es mayor o igual que operando2
-lt operando1 es menor que operando2
-le operando1 es menor o igual que operando2

Operadores lógicos:

Operador Significado
-a And
-o Or

De forma que así podreis crear lineas complejas como por ejemplo:

[-w /home/arwest/.profile -a -n $MAIL]

Esto comprobaría si se tienen permisos de escritura en /home/arwest/.profile de tenerlos se comprueba si la variable mail tiene algún contenido
NOTA: Los corchetes los precisa el interprete para separar.

Bueno, ahora me voy a limitar a poner estructuras sin explicarlas gran cosa… si quereis saber que hace cada una con detalle, recordad! Google es tu amigo :P

Estructura if:
Esta estructura valora una condición, si la condición se cumple realizará la expresión1 y si no la expresión2

if condición1
then expresion1
else expresion2
fi

tanto la expresión1 como la expresión2 podrían ser otro if

if condición1
then
: #poner : equivale a no hacer nada si se cumple la condición
elif condición2 #se puede poner tanto elif como else if
then expresión1
fi
fi

NOTA: No es obligatorio que haya else pero si lo es que haya then

Estructura case:
Esta estructura cogerá una variable ($variable) y comprobará si su valor se corresponde con el valor1 o con el valor2 si coincide realizará la expresión que tienen asignada (expresión1 o 2 respectivamente) y en caso de que no coincida ejecutará la expresión del caso *

case $variable; in
valor1)
expresión1
valor2)
expresión2
*)
expresión3
esac

Estructura While:
Mientras la condición se cumpla, va a estar ejecutando el bucle una y otra vez hasta que se cumpla.

while condición
do
expresion
done

Estructura until:
Esta estructura funciona exactamente igual que un while con la diferencia que se ejecutará mientras la condición sea falsa y saldrá en el momento que sea verdadera.

until condición
do
expresión
done

Estructura For:
Esta estructura a diferencia del while se ejecuta un numero fijo de veces.

for variable in expreg1 expreg2 ... expregn
do
expresión
done

expreg1…expregn son los valores por los que tiene que pasar la variable para poder salir del bucle.

Tambien se podría utilizar sin un listado de expresiones tomando así los que le pasan por parametro desde el teclado.

for variable
do
expresión
done

Si se quiere en algún momento salir del bucle se puede utilizar la expresión:
break -> Sale del bucle y continua la ejecución del codigo
continue -> Termina la iteración y continua con la siguiente.

Variables de entorno:
Estas son variables predefinidas por el sistema que nos permiten obtener valores o cambiarlos como pueden ser directorio actual, lenguaje, etc etc

Variable Significado
$PS1 Aspecto del apuntador (prompt) principal
$PS2 Aspecto del apuntador (prompt) secundario
$PWD Directorio actual
$HOME Directorio home del usuario que ejecuta el proceso
$USER Nombre de login del usuario que ejecuta el proceso
$$ PID del proceso
$PATH Ruta de búsqueda del usuario actual

Si lo que deseamos es que se guarden algunas de nuestras variables en el sistema tendremos que utilizar la orden export, por ejemplo:

export var1

Bueno esto es todo por el momento, ahora lo mejor que podeis hacer es intentar crear vuestros scripts, y aprender un poco, si teneis dudas, lo mejor y más útil, nuestro amigo google. Yo no soy ningún gran experto en bash scripting pero puedo tratar de resolver vuestras dudas.

Tambien me gustaría agradecerle a ZoSo ya que este breve manual está basado en su manual ;)

Así que a trabajar todos! :D

Anuncios
    • rancher
    • 11/03/16

    Excelente Post,,,de gran ayuda para los que empezamos con bash.
    Gracias

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: