Programar en Bash, pequeño manual de referencia [Cheat Sheet]

Aquí os dejo mi cheat sheet, o pequeño manual de referencia, personal sobre Bash. Faltan cosas pero creo que he cubierto lo más básico. Espero que os guste. 😉

1. Cómo ejecutar scripts Bash

Para escribir en Bash puedes hacerlo directamente desde la consola/terminal de GNU/Linux, sin embargo, su mayor potencia radica en poder escribir ‘scripts’ y ejecutar piezas de código para automatizar tareas. Aquí muestro paso a paso un ejemplo.

1.1. Escribe un ‘script’ Bash

Abre tu editor de textos favoritos y escribe el siguiente código.

#!/bin/bash
echo "Hola mundo"

Guárdalo como holamundo.sh (la extensión no importa pero ésta es renococida por muchos editores de texto) .

1.2. Dale permisos

Para lanzar el ‘script’ Bash, dále permisos de ejecución. Para ello escribe en tu terminal/consola de comandos:

chmod u+x holamundo.sh

Recuerda ejecutar este comando y los siguientes en la misma carpeta/directorio donde se encuentra holamundo.sh

1.3. Ejecútalo

Lanza el ‘script’ ejecutando en tu terminal/consola:

./holamundo.sh

Si no ha habido ningún problema se ejecutará el ‘script’ de Bash mostrando la frase “Hola mundo”.

2. Características Bash

Aquí se mostrarán las características de dicho intérprete de comandos o shell de GNU. Recuerda que los comandos son las acciones a ejecutar desde la consola/terminal Linux. En la siguiente sección hay una recopilación de ellos.

2.1. Comentarios

Los comentarios en Bash se hacen línea a línea con el símbolo #.

#!/bin/bash

#
# Hola Mundo comentado
#

echo "Hola mundo"

2.2. Variables

Las variables no tienen tipo, es decir, una variable puede contener una cadena, un número, etc. sin necesidad de definirlo.

La sintaxis es:

nombre_variable=valor_variable

Es obligatorio no dejar espacios antes o despues del simbolo ‘=’ ya que sino Bash interpretaría la variable como un comando Linux.

Para acceder a una variable simplemente escribe como prefijo $ en el nombre de la variable.

echo $varname

Un ejemplo sencillo:

#!/bin/bash

# Asignación y salida de variables

mivariable="Me llamo Nacho"
echo $mivariable

2.2.1. Paso de variables

Cuando ejecutas desde tu terminal/consola tienes la posibilidad de pasarle más argumentos. Por ejemplo:

./miScript.sh hola 4

Para recoger estos valores escribe $ y a continuación el número de posición del argumento pasado. El primer argumento tiene valor $1, que sería ‘hola’, y el segundo argumento sería $2, en el ejemplo sería el número 4. La variable $0 es el propio nombre del archivo.

#!/bin/bash

#
# Paso de variables
#

echo "Tu primer argumento es" $1
echo "Tu segundo argumento es" $2

También hay que destacar que $? guarda el valor de salida del último comando ejecutado. $* almacena todos los argumentos y $# es el número de argumentos pasados.

2.3. Comparaciones y/o expresiones

Los condicionales y bucles se rigen mediante la evaluación de una expresión. Por eso lo primero es saber cómo programar en Bash las evaluaciones de una expresión.

La evaluación de una expresión da como resultado verdadero o falso. Si la comparación o evaluación de la expresión es verdadera se ejecutará el bucle o la condicional, si es falsa la evaluación no se ejecutará.

En Bash, la sintaxis es la siguiente:

test expresión

ó

[ expresión ]

Un ejemplo de expresión sería [ 3 -eq 5 ] que comprueba si el valor 3 es igual a 5. Como es incorrecto, el valor que devuelve es falso. Los símbolos [ y ] tienen que estar obligatoriamente separados por un espacio.

2.3.1. Comparaciones numéricas

numero1 -eq numero2: Devuelve verdadero si 'numero1' es igual a 'numero2'. numero1 -ge numero2: Devuelve verdadero si 'numero1' es igual o mayor a 'numero2'. numero1 -gt numero2: Devuelve verdadero si 'numero1' es mayor a 'numero2'. numero1 -le numero2: Devuelve verdadero si 'numero1' es igual o menor a 'numero2'. numero1 -lt numero2: Devuelve verdadero si 'numero1' es menor a 'numero2'. numero1 -ne numero2: Devuelve verdadero si 'numero1' no es igual a 'numero2'. read more

Leer más » 23 Comentarios

Google Store – Venta al público de accesorios googleados

La semana pasada, dándome una vuelta por el blog oficial de Google, me encontré con una entrada en la que hablaban de la imagen que encabeza este post. Sí, se venden sudaderas de gmail.

Desde que empezó este servicio de correo a mediados del año 2004 nada me ha hecho dudar de sus capacidades ni de buscar cualquier otra alternativa, de hecho lo uso en mi cuenta personal y para administrar mis dominios personales (transfieriendo los registros MX desde mi servidor DNS). Y sí, si sois de los que pensáis como yo, creo que poco vais a tardar en haceros con una vestimenta tan particular. Personalmente me parece una idea de negocio muy buena. read more

Leer más » 4 Comentarios

Descargar ficheros sin usar enlaces con PHP

Cuando me refiero a no usar enlaces, me refiero a no usar enlaces al fichero en sí, por ejemplo: https://www.linuxhispano.net/logo.jpg sino a algo así como http://www.dominio.com/obtener_fichero.php?id_fichero=100.

¿Con qué idea podemos querer utilizar esto? Además de ocultar algo más de nuestra estructura interna, que siempre viene bien, es útil saber cómo descargar ficheros de este modo para tener un mayor control sobre el flujo, de forma que podamos comprobar rol de la persona que descarga, acceder a una base de datos para obtener el fichero de un campo BLOB o culaquier otro tratamiento que queramos hacer.

Para ello con PHP y suponiendo que tenemos el fichero ya accesible en disco (si está almacenado en una BBDD una solución podría ser crear un temporal mientras tanto), sólo tendremos que hacer lo siguiente:

header('Content-Description: File Transfer');
header("Content-Type: application/force-download");
header('Content-Disposition: attachment; filename='.basename($ruta));
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . obtenerTamanhoFichero($ruta));
readfile($ruta);

exit;

Utilizo una funcion obtenerTamanhoFichero que ahora os presentaré porque la función equivalente de PHP en ocasiones no funciona correctamente. Por cierto, el fichero en cuestión estará en la ruta indicada por la variable correspondiente, $ruta.

function obtenerTamanhoFichero ($url) { if (substr($url,0,4)=='http') { $x = array_change_key_case(get_headers($url, 1),CASE_LOWER); if ( strcasecmp($x[0], 'HTTP/1.1 200 OK') != 0 ) { $x = $x['content-length'][1]; } else { $x = $x['content-length']; } } else { $x = @filesize($url); } return $x; } read more

Leer más » 2 Comentarios

Lo mejor de mi RSS del 31 de mayo al 6 de junio

Leer más » 4 Comentarios

Revista Tux Info, número 27 disponible

Si hace sólo unos días os comentábamos que aparecía un nuevo número de la revista Linux+, hoy os traemos la aparición del número 27 de la revista Tux Info.

El contenido más importante es el siguiente:

  • Noticias del mes.
  • Programación – GTK+ se acerca a la versión 3.0.
  • Opinión – Cuestión de formatos y lenguas olvidadas.
  • Distribuciones – Slackware 13 2da parte. Casi todo como en los viejos tiempos.
  • Nota de tapa – Informe del FLISOL 2010.
  • OpenSolaris – El escritorio de OpenSolaris…¡único! (segunda parte, muy paqueta…).
  • Diseño – Corrigiendo niveles en GIMP.
  • Distribuciones – Haciendo lugar a Ubuntu 10.04 desde Windows 7, Revisión de Lucid Lynx.
  • read more

    Leer más » 3 Comentarios

    Convirtiendo texto en diferentes juegos de caracteres desde la línea de consola

    El otro día compilando unos ficheros fuente en Java, el javac me avisaba de que la codificación del fichero era ISO-8859 y que por lo tanto había problemas a la hora de interpretar todos los acentos y caracteres no ASCII presentes en el fuente. En realidad son avisos lo que aparecen y no errores, por lo que tampoco es necesario hacerlo pero sí conveniente para evitar las filas y filas de warning.

    Este problema es frecuente cuando el fichero ha sido editado en Windows. En sistemas Linux no es problema porque suele utilizarse por defecto UTF-8. read more

    Leer más » 2 Comentarios

    [Tips] Personaliza el escritorio de Google

    Desde el blog oficial de Google me entero de que ya podemos cambiar el fondo de la página de Google, podemos usar nuestras imágenes, las que haya en nuestro Picasa o mismamente las que nos ofrece Google destinadas a tal efecto.

    Yo no he podido esperar ni un sólo segundo y aquí el resultado:

    Actualmente sólo está disponible en Google USA. Para acceder a la página del buscador aquí.

    Leer más » 5 Comentarios

    [Entrada Colectiva] Reproductores de música en Linux

    Me parece que es una buena idea realizar esta entrada participando todos, iré listando los reproductores más conocidos y vosotros mediante comentarios podéis ir sugiriendo más y los iré incorporando a la lista final. ¿Qué opináis?

    Reproductores de música en Linux:

    Banshee: http://banshee-project.org/ Amarok: http://amarok.kde.org/ Clementine: http://code.google.com/p/clementine-player/ Guayadeque: http://sourceforge.net/projects/guayadeque/ aTunes:

    http://www.atunes.org/ read more

    Leer más » 9 Comentarios

    wikipedia

    Leer más » 8 Comentarios

    GCC empieza a implementarse C++

    El GCC Steering Committee y la FSF han aprobado el uso de C++ en el propio GCC. Sin embargo dicha implementación será gradual y poco a poco ya que los desarrolladores de dicho compilador sólo están especializados en C. Se irán empezando por modificar aspectos específicos para aprovechar las ventajas que ofrece un lenguaje orientado a objetos como un encapsulamiento mucho más refinado.

    ¿Esto que puede significar? Pues la decisión ha sido tomada para aumentar aún más el rendimiento en la compilación. C++ añade nuevas estructuras de programación que no son posibles en C. Prácticamente puedes hacer un programa en C con el compilador g++ (el compilador de C++). La decisión se ha tomado por esto mismo, para facilitar la descarga de trabajo en la compilación. Personalmente no veo mal esta decisión aunque, eso sí, resulta un poco paradójico. read more

    Leer más » 2 Comentarios