jueves, 29 de noviembre de 2018

printf para bash

Bash dispone del comando echo para mostrar texto por el terminal. No obstante, en ocasiones este comando se nos puede quedar corto y se hace excesivamente elaborado formatear ciertas cadenas de texto a nuestro gusto.
Para estos cometidos, el comando interno de bash printf será de gran ayuda dado que funciona de forma bastante similar a printf de C.
Veamos un ejemplo de formateo de texto en forma de tabla:

lunes, 26 de noviembre de 2018

Variables bash #1

Bash tiene multitud de variables internas que permiten obtener una gran variedad de información. Una de ellas es $SECONDS.
Esta variable indica el número de segundos que el proceso bash está en ejecución. Si lo ejecutamos sobre la linea de comandos, obtendremos el tiempo que ese shell lleva en ejecución:
$ echo $SECONDS
292
Si lo ejecutamos dentro de un shell script que use bash, podremos usar esta variable para controlar el tiempo máximo de ejecución del script, ejecutar alguna acción cada x segundos, etc.
#!/usr/bin/env bash

MAXIMO=10

while [ $SECONDS -le $MAXIMO ]
do 

  echo "$SECONDS segundos de ejecucion del script"
  sleep 1

done

jueves, 22 de noviembre de 2018

Dando color al terminal

La consola de Linux permite el uso de colores en el texto para dar un toque distinto a nuestras aplicaciones. Estos colores se activan mediante el uso de códigos de escape ANSI.
Por ejemplo, si se desea escribir un texto en rojo pondríamos lo siguiente:
$ echo -e "\033[31mRojo"
Siendo los caracteres iniciales el código de escape ANSI asociado a dicho color.
Los colores que se pueden usar son los siguientes:
  • Negro: \033[30m
  • Rojo: \033[31m
  • Verde: \033[32m
  • Amarillo: \033[33m
  • Azul: \033[34m
  • Lila: \033[35m
  • Cian: \033[36m
  • Blanco: \033[37m
A continuación se muestra una forma práctica de usar estos códigos de escape:

lunes, 19 de noviembre de 2018

Instrucción vacía

La mayoría de los lenguajes de programación tienen lo que se denomina instrucción vacía. Esta instrucción en realidad no realiza ninguna función práctica, pero permite rellenar un hueco allí donde se necesita.
Veamos un ejemplo en Python:
import sys
try:
    f = open('myfile','r')
except:
    pass
En este ejemplo, si el fichero myfile no existe saltará una excepción que será capturada por el bloque try. Como no se requiere ejecutar ninguna acción si salta la excepción y la sección except hay que colocarla, se pone en ella la instrucción vacía pass de Python.
Veamos cuál es la instrucción vacía en bash y qué usos se le puede dar.

jueves, 15 de noviembre de 2018

bash en modo debug

Bash permite la ejecución de shell scripts bastante potentes. A menudo, este es un recurso muy utilizado por administradores de sistemas para labores de lo más variadas.
A todo el mundo el ocurre en alguna ocasión que un script no hace lo que debería, falla en algún punto y a pesar de revisar el código una y otra vez no se ve el punto de fallo.
Llegados a esta situación, es el momento de añadir comentarios a lo largo del código para intentar acotar el segmento donde se produce el fallo. Un echo dentro del if y otro en el else, para ver por dónde pasa. Y uno más en el bucle para ver las repeticiones que se producen.
Una vez encontrada y corregida la errata, a buscar todos los comentarios que se insertadon para eliminarlos.
Hay un método mucho más fácil para seguir la pista a la ejecución de un script y ver así cuál es su punto de fallo.

lunes, 12 de noviembre de 2018

Manipulación de ficheros que empiezan con un guión

En esta ocasión vamos a ver el tratamiento que hay que dar a los ficheros cuyo nombre comienza con un guión, dado que las técnicas habituales de uso de caracteres de escape para no tratar los caracteres especiales no funcionan.
Veamos un ejemplo clásico:
$ echo "HOLA" > tm?p
$ rm tm\?p
rm: remove regular file 'tm?p'?
Como se observa, el caracter “?” es considerado como un caracter especial, y para referirse a él como un simple caracter y no como un símbolo especial, hay que usar el caracter de escape “\” antecediéndolo.
Sin embargo, esto no ocurre si el nombre del fichero comienza con un guión intermedio:
$ echo "HOLA" > -tmp
$ rm -tmp
rm: invalid option -- 't'
Try 'rm ./-tmp' to remove the file '-tmp'.
Try 'rm --help' for more information.
$ rm \-tmp
rm: invalid option -- 't'
Try 'rm ./-tmp' to remove the file '-tmp'.
Try 'rm --help' for more information.
$ rm "-tmp"
rm: invalid option -- 't'
Try 'rm ./-tmp' to remove the file '-tmp'.
Try 'rm --help' for more information.
Los errores mostrados indican que el comando usado (rm en este caso, pero puede ser otro cualquiera) considera el guión como el comienzo de un parámetro.
Vamos a ver dos métodos para referirnos a los ficheros que comienzan con un guión.

jueves, 8 de noviembre de 2018

Usos del comando hostname

A continuación vamos a ver algunos usos útiles que se le puede dar al comando hostname de Linux para obtener información sobre la configuración de red del equipo:

Conocer el nombre del equipo

Este es el uso habitual que se le suele dar a este comando: conocer el hostname de la máquina en la que estamos.
$ hostname
myserver
Adicionalmente, se puede usar el parámetro -s, de short, para conocer el nombre del equipo, o lo que es lo mismo, la primera parte del nombre FQDN.
$ hostname -s
myserver
Conocer el dominio DNS del equipo
Para obtener el nombre del dominio DNS configurado en el equipo, habrá que usar el parámetro -d:
$ hostname -d
example.com

Conocer el nombre FQDN del equipo

​El FQDN (Fully Qualified Domain Name) de un equipo está formado por su hostname y el nombre de dominio. La forma de conocer este dato es la siguiente:
$ hostname -f
myserver.example.com