Bash para principiantes

terminal
FacebooktwitterinstagramFacebooktwitterinstagram

Bash es el interprete de comandos por excelencia en Unix, y por lo tanto lo es también de OSX.

Aunque hay otros intérpretes de comandos, o shells muy interesantes como csh o ksh, el éxito de bash es debido a la versatilidad en línea de comandos y a su potencia componiendo scripts.

Un script en bash, se compone de:

Una cabecera que le dirá al sistema que este script lo interpretará bash.

#!/bin/bash

Debería incluir una pequeña descripción de su finalidad.

#Comentarios

Variables de entorno para la ejecución del script

VARIABLE1=VALOR1

Una lista de comandos ejecutados recursivamente.

#!/bin/bash
echo “Este script muestra la ejecución de varios comandos”
ls
date
echo “ya se ha acabado”

Como es obvio, un script de bash no solo sirve para hacer un listado de un directorio y enseñar la hora.

Como todo lenguaje de programación, bash tiene sus propias funciones y como toda shell, también tiene sus propios comandos ‘embebidos’.

La forma de ejecución de varios comandos es con la ayuda de operadores de lista:

 comando1 ; comando2 && comando3

En este ejemplo,  se ejecuta el comando1 y después se ejecuta el comando2. Si el comando2 no produce ‘0’ , se ejecutará el comando3.

Por ejemplo, si ejecutásemos:

comando1 ; comando2 || comando3

comando3 se ejecutaría en caso de que comando2 diera otra salida distinta a error.

Si queremos ejecutar varios comandos a la vez, en diferentes planos, deberemos poner:

comando1 & comando2 & comando3

Para acceder a cualquiera de estos comandos, se utiliza el comando

fg numero_de_trabajo

Si queremos unir la salida de varios programas, podemos utilizar las tuberías o ‘pipes’ (este caracter se consigue con alt+1)

cat lista_de_nombres | sort

Con lo cual veríamos en pantalla la lista de los nombres contenida en el fichero, ordenada alfabéticamente.

El numero de pipes puede ser infinito:

cat lista_de_nombres | sort | grep Pepe | more

Con este comando veríamos la lista de lista de antes, ordenada, excluyendo a los que no se llamen «Pepe» y paginada con el comando more.

Para series de comandos más largos, necesitaremos el lenguaje de script de bash.

Bash tiene saltos condicionales, incondicionales, bucles, asignación de variables, variables de entorno y funciones, como cualquier lenguaje de programación.

Vamos a ver un ejemplo de script en bash:


#!/bin/bash
# Ejecutaremos el script y según lo que introduzcamos como parámetro,
# nos dará una respuesta distinta.
echo “ Cuantos meses llevas con tu Mac?”
case “$1” in
	0-1)
		echo “El inicio es lo mas divertido”
		;;

	2-3)
	 	echo “ Ya sabes donde esta el ls y el rm, jeje”
		;;
	4-6)
		echo “Comienzas a dominar el sistema”
		;;
	7-12)
		echo  “Todavia falta”
		;;
	13-24)
		echo “Llevas bastante tiempo”
		;;
	*)

		echo “ Respuesta no valida o llevas mas de 24 meses”
		exit 0
		;;
esac
exit 0

Bien, ya hemos comprendido el uso de la pareja case-esac, muy utilizado en los scripts de inicio y en todos aquellos que no que ramos abusar de los saltos condicionales if.

Los saltos condicionales if se pueden utilizar para asegurarnos durante el lanzamiento de un script, que existe un fichero o no:


COMANDO=$1
if  [ -x $1 ] ; then
echo –n “Se puede ejecutar”
else
echo .n “no se puede ejecutar”
fi

if, aparte de –x tiene una nutrida lista de descriptores de fichero. Para más información de esta lista, se puede recurrir al manual de bash (escribe «man bash» en el terminal).

Las variables de entorno del propio bash, se fijan en ~/.bash_profile, ~/.bashrc y en /etc/profile.d

siendo lo mas recomendado minimizar el uso de variables generales en el sistema.

El uso de sed, cut, y otras pequeñas utilidades, pueden ahorrarnos muchas horas de edición si tenemos que hacer substituciones de texto, ordenar, etc.

Las posibilidades de bash, necesitan de la creación de una necesidad especifica, que siempre podremos suplirla con la ayuda de su extenso manual.

Saludos,

Print Friendly, PDF & Email
FacebooktwitterredditlinkedinmailFacebooktwitterredditlinkedinmail
abril 25, 2011

Etiquetas: , ,
  • Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *