Cinco consejos a la hora de hacer scripts de Bash en Linux.

Llevamos unos días donde he hablado mucho de PowerShell y parece que nos estemos olvidando un poco del mundo Linuxero, así que hoy vamos a ver una serie de consejillos para hacer scripts con Bash en nuestro sistema Linux de forma más efectiva:

Usa comillas dobles a la hora de referenciar variables:

Trabajar con cadenas de texto con espacios puede ser problemático. A la hora de referenciar una variable para usar su valor es recomendable hacerlo poniéndola entre comillas dobles: evitará que la cadena se corte por el uso de espacios en blanco y también mejorará el rendimiento, evitando hacer rastreos de comodines innecesariamente. Si ejecutas este script lo verás:

empresas="Tecnológicas Camarasa SL"
echo "Sin comillas:"
echo
for nombre in $empresas; do
        echo "$nombre"
done
echo
echo "Con comillas:"
echo
for nombre in "$empresas"; do
        echo "$nombre"
done
exit 0

Si lo ejecutas verás como en el primer caso va a imprimir tres nombres, pues se confundirá con los espacios, mientras que en el ejemplo con comillas lo sacará en una sola línea respentado los espacios.

Forzar la salida del script en caso de error:

A veces un script puede seguir ejecutándose aunque un comando falle, y eso puede derivar en problemas más adelante. Con la siguiente línea podemos forzar la salida del script en caso de que un comando no funcione:

set -o errexit 

Forzar la salida del script en caso de usar una variable no declarada:

Como en el caso anterior, esto puede derivar en errores más graves más adelante, así que es recomendable que el script se detenga si se usa una variable que está sin declarar:

set -o nounset

Declara las constantes como readonly:

Las constantes en esencia son un variable con un valor estático. A la hora de declarar una constante en nuestro script, tanto por seguridad como por rendimiento, lo mejor es hacerlo con el atributo readonly, puesto que no va a vaciarse ni sobrescribirse el valor.

readonly fichero_host="/etc/hosts"
readonly pi=3.14159265359

Usa la sintaxis $(comando) en lugar del antiguo `comando` :

Si queremos asignar la salida de un comando a una variable antiguamente lo haríamos invocando al comando entre dos acentos. Hoy por hoy la sintaxis sería utilizando el comando entre paréntesis precedido por el carácter $, tal que así:

#Sintaxis antigua
usuario=`echo “$UID”`
#Sintaxis modernizada recomendada
usuario=$(echo “$UID”)

FTP en línea de comandos

El otro día me encontraba instalando un servidor con varias instancias virtualizadas de Windows 2k12, que por cuestiones de rendimiento iban sin entorno gráfico (el llamado modo Server Core). Necesitaba descargar una serie de archivos desde un servidor FTP, así que tuve que recurrir a la línea de comandos… y eso me recordó que nunca habíamos tocado aquí el tema.

Para conectar el ftp basta con teclear en la consola ftp seguido de la dirección del servidor al que nos queremos conectar. Por ejemplo:

ftp servidordeprueba.com

Tras eso nos debería pedir usuario y contraseña (o no, eso depende de la configuración del servidor, pero lo normal es que sí). Una vez conectados disponemos de los siguientes comandos para trabajar:

  • ls o dir: Dependiendo de si estamos en un entorno Unix o Windows. Nos listará los archivos existentes en el directorio.
  • cd: Tanto en Unix como en Windows es el comando que se utiliza para navegar entre carpetas.
  • pwd: Si de tanto usar el cd te pierdes y nor recuerdas en qué directorio estás, este comando te lo dirá.
  • status: Nos informa del estado de nuestra conexión con el servidor.
  • open: Si se cierra tu conexión ftp, si quieres cambiar de servidor o si al ejecutar el comando ftp no has puesto a qué servidor te conectas, este comando va seguido de la dirección del servidor con el que queremos conectar.
  • binary: Aplicando este comando definimos que los datos que se descargarán vendrán serán un archivo binario (ejecutables, imágenes, vídeos, audio). Hay otro modo, del que hablaremos a continuación, para archivos de texto. No es recomendable descargar archivos binarios en modo texto, ya que probablemente se corrompan.
  • ascii: Al igual que binary define el tipo de archivo que descargaremos. Se recomienda para archivos txt,htm, html, css,asp, vbs, js, xml, php… en fin, todo lo que sea texto plano.
  • get: Es el comando utilizado para descargar desde el servidor. La sintaxis es get nombreDeArchivo rutaDondeLoGuardaremos. Si no ponemos ruta de destino lo descargará en el directorio en el que estamos. Existe la variable mget que nos permite descargar múltiples archivos, o reget para reiniciar una descarga cortada.
  • put: Lo contrario que el anterior, la sintaxis es similar, pero en este caso en lugar de descargar desde el servidor subimos archivos al mismo.
  • rename: Nos permite renombrar un fichero del servidor.
  • delete: El nombre es bastante intuitivo, ya que sirve para borrar ficheros del servidor. No funciona con carpetas. Mucho cuidado al usarlo, no vaya a ser que borres lo que no debieras.
  • mdelete: Como delete, pero con la diferencia es que borra varios archivos en lugar de uno. Basta con ponerlos todos, separados por espacios.
  • rm: Si lo que quieres es borrar una carpeta, este es tu comando. Sólo funciona con carpetas vacías, así que tendrás que borrar antes los ficheros que contiene.
  • chmod:Un viejo conocido para los usuarios de UNIX. El comando chmod nos permite modificar los permisos de lectura y escritura de un archivo o carpeta.
  • Finalmente bye y quit nos permiten salir del ftp para volver a la consola de comandos.

Y en caso de usar un sistema linux el comando ! nos permitirá ejecutar comandos en nuestra shell sin salir del ftp. Basta con usar ! seguido de un comando.

Existen más comandos y opciones, pero estos son los más usados y básicos. Puedes ver información sobre el resto usando el comando HELP

Cambiando el escritorio de Ubuntu, de Unity a GNOME

Bueno, por no aburriros con la programación web, y a pesar de que Ubunto 12.04 está al caer, vamos con una nueva entrada: Cambiar el escritorio Unity por GNOME.

Y para quedar de guays lo vamos a hacer por línea de comandos (tampoco tengo muy claro si se puede hacer de otra forma, pero…). Así que abre tu terminal y empieza:

sudo apt-get update
sudo apt-get install gnome-panel gnome-session-fallback
sudo apt-get install gnome-shell

Ale, ya está. Escritorio y shell instalado. Ahora basta con reiniciar y elegir en LightDM el escritorio GNOME. Pero ¿cómo hacer GNOME el escritorio por defecto? Vuelta al terminal y:

sudo /usr/lib/lightdm/lightdm-set-defaults -s gnome-shell
sudo /usr/lib/lightdm/lightdm-set-defaults -s gnome-fallback

Y ale, ¡ya está! Listo y finiquitado el cambio.