Desde hace ya muchos años uso GNU/Linux de forma habitual, tanto en el trabajo como a nivel personal. Una de las grandes ventajas de usar este sistema operativo es la facilidad con la que puedes hacer las mismas cosas desde la consola. bash puede y debe ser tu gran aliado. Aunque a primera vista puede resultar feo trabajar en modo consola, sobre todo en los días que corren, la potencia que ello te da es tanta que da pena desaprovecharla.
Hoy os voy a dar algunos consejos acerca de buenos hábitos a la hora de emplear bash. Hay miles, así que este listado irá creciendo.
- Creación de directoriosEs uno de los puntos más conflictivos a la hora de trabajar. El comando está claro, mkdir, pero la forma de crear árboles complicados puede ser muy diferente.Un mal ejemplo,
shell> mkdir tmp shell> cd tmp shell> mkdir a shell> cd a shell> mkdir b shell> cd b shell> mkdir c shell> pwd ~/tmp/a/b/c
Y ahora un buen ejemplo,shell> mkdir -p tmp/a/b/c
Y otro ejemplo práctico más simple y útil que denota la potencia de emplear mkdir correctamente.shell> mkdir -p project/{lib,src,doc/{html,pdf},demo/stat}
- Descomprimir ficherosEn GNU/Linux la extensión tar.gz suele ser muy empleada para trabajar con ficheros. Tras descargarla de donde corresponda, generalmente nos queda el fichero en la carpeta habitual de descargas, pero para trabajar con él, toca descomprimirlo. Una mala práctica es descomprimirlo directamente en dicha carpeta, ya que terminamos por dejar el directorio sucio, mientras que una buena práctica es emplear la opción -C del propio comando, que nos permite establecer la ruta completa donde será descomprimido, sin tener que mover el fichero descargado.
shell> tar zxvf -C /tmp zabbix.tar.gz
- Entrecomillado de variablesHay que tener cuidado a la hora de definir y de entrecomillar una variable o su resultado. Así evitaremos sorpresas futuras.
shell> mkdir -p test/{a,b} shell> ls test a b shell> VAR="test/*" shell> echo $VAR test/a test/b shell> echo "$VAR" test/* shell> echo $VARa shell> echo "$VARa" shell> echo "${VAR}a" test/*a shell> echo ${VAR}a test/a
- Concatenar comandos siempre que sea posibleEsta es una de las partes en las que más potencia tiene la shell de GNU/Linux, la concatenación de comandos. La salida de un comando puede ser la entrada de otro y así recursivamente, pero hay que tener mucho cuidado con lo que intentamos redirigir y hacerlo con mucha cabeza. Por ejemplo:
- No usar cat para lista y grep para filtrar. Filtrar directamente!
shell> cat file.txt | grep "hola" # mal shell> grep "hola" file.txt # bien
- Evitar usar grep y luego contar líneas. Emplea las opciones de grep (-c)!
shell> grep "hola" file.txt | wc -l # mal shell> grep -v "hola" file.txt # bien
- Emplea, siempre que sea posible awk y no grep. Es mucho más rápido!
shell> ls -l /tmp/a/b/c | grep sep # mal shell> ls -l | awk '$6 == "sep"' # bien
- Emplea expresiones de control para concatenar comandosSi te interesa que un comando se ejecute siempre que el anterior se haya ejecutado correctamente, hazlo en una única línea. Y también al revés.
- La cadena && permite la ejecución si el comando anterior ha devuelto un status 0 (terminó correctamente).
shell> cd /tmp && tar zxvf ~/archive.tar
- La cadena || indica que se haga el segundo comando si el primero no tuvo una salida 0 (correcta).
shell> cd /tmp || mkdir /tmp && tar zxvf ~/archive.tar
- En scripts, comprueba recursos antes de emplearloSi estás creando un script con acceso a ficheros, comprueba que estos existan antes de usarlos. Te evitarás malas jugadas!
if [ -d "/Fichero/necesario" ] then ... else #fichero no existe! fi
La entrada Buenos hábitos en Linux Shell la puede leer en Puppet Linux.