Mostrando entradas con la etiqueta shell script. Mostrar todas las entradas
Mostrando entradas con la etiqueta shell script. Mostrar todas las entradas

jueves, 2 de mayo de 2019

Comando yes

Como continuación de la entrada anterior, donde se vio el comando seq, hoy vamos a ver otro comando “curioso”. El comando yes.
El comando yes imprime por la salida estándar el caracter “y“ de forma infinita y en líneas individuales. Hay que pulsar Ctrl+c para detenerlo:
$ yes
y
y
y
^C
Sin embargo, se puede especificar como argumento cualquier texto para que lo repita de forma indefinida:
$ yes "Hola mundo!"
Hola mundo!
Hola mundo!
Hola mundo!
^C
Un caso práctico para usar este comando es el pasar un texto a una aplicación o script que esperará una entrada por teclado. Veamos un ejemplo:
# yes | apt dist-upgrade
De esta forma, cuando apt solicite confirmar la descarga e instalación de paquetes recibirá el caracter “y“ y continuará el proceso. Aunque el comando apt tiene opciones para forzar la contestación de preguntas, nos sirve para mostrar la utilidad del comando. Quizá tengamos scripts que esperan algún otro texto, con lo que el comando yes serviría.

lunes, 29 de abril de 2019

Comando seq

En cualquier distribución de Linux hay una cantidad ingente de comandos y aplicaciones instaladas y listas para ser usadas. Basta con escribir una letra y pulsar Tabulador para ver todas las opciones existentes.
Hoy mostraré uno de estos comandos que no son conocidos por lo general. Hablamos del comando seq.

jueves, 4 de abril de 2019

Variables bash #3

En una entrada anterior, Variables bash #2, se vio cómo utilizar los parámetros que se pasan a un script en bash. En esta ocasión se va a mostrar una variable de bash llamada LINENO.
La variable $LINENO contiene el número de línea que se está ejecutando en cada momento en un script bash. Por tanto, si tenemos el siguiente código:
#!/usr/bin/env bash

echo "Primera linea"
echo $LINENO
echo "Segunda linea"
y se ejecuta, obtendremos el siguiente resultado:
$ ./prueba.sh
Primera linea
4
Segunda linea
Hay que destacar que se consideran las líneas vacías (en blanco) en la contabilidad de la línea en ejecución. En el caso mostrado, echo $LINENO está efectivamente en la línea número 4.
El uso de esta variable es útil para acotar errores en la ejecución de un script. Se pueden cambiar las líneas del tipo echo “Pasa por aquí” por un echo $LINENO. Además, se puede combinar con la activación de numeración de líneas en Vim para depurar de forma más rápida nuestro script.

lunes, 11 de marzo de 2019

Conocer el nombre del kernel en uso

Los sistemas operativos de tipo Unix-like suelen disponer de mecanismos para averiguar qué kernel es el que está en uso. Esto es útil para, por ejemplo, restringir el uso de un script a un tipo de kernel en concreto.
El siguiente comando servirá para detectar el tipo de kernel en uso, y está diponible en la amplia mayoría de sistemas Unix-like:
$ uname -s
Linux
Para el caso de FreeBSD:
$ uname -s
FreeBSD
Y para el caso de MacOS:
$ uname -s
Darwin
Y un ejemplo de uso prodría ser el siguiente:
#!/usr/bin/env bash

if [ `uname -s` = "Darwin" ]; then
  echo "Continuar con el script en este Mac"
fi

lunes, 25 de febrero de 2019

Redirección de salida estándar y de error

En el terminal de Linux, las aplicaciones disponen de dos salidas por defecto por las que sacar texto: la salida estándar (stdout) y la salida estándar de error (stderr).
Por defecto, ambas salidas son redireccionadas al terminal, por lo que si escribimos el siguiente comando:
$ ls + a.sh
ls: cannot access '+': No such file or directory
a.sh
Por un lado obtendremos la primera línea, que salió por stderr, y por otro la segunda línea que salió por stdout al no tratarse de ningún error.

jueves, 21 de febrero de 2019

Obtener la temperatura de una ciudad

Hoy vamos a ver una forma rápida para obtener la temperatura que hay en una ciudad mediante un script. Para ello vamos a basarnos en la web https://www.eltiempo.es, pero este método es extensible a cualquier otra web.
Para ello, accederemos mediante un navegador web e iremos a la página del tiempo en la ciudad deseada, por ejemplo Murcia: https://www.eltiempo.es/murcia.html
El siguiente paso será hacer esto mismo que hemos realizado con un navegador, pero esta vez mediante un script para quedarnos con el valor que nos interesa: la temperatura.

lunes, 28 de enero de 2019

Fallo al referenciar parámetros a partir de la décima posición

Como se vio en la entrada anterior, donde se explica cómo hacer uso de los parámetros que se le pasan a un script, se puede referenciar a los distintos parámetros de forma individual.
No obstante, surgirán problemas si intentamos referenciar los parámetros a partir de la posición 10.
Veamos un ejemplo:

jueves, 24 de enero de 2019

Variables bash #2

Como dijimos en un post anterior, bash tiene multitud de variables internas que podemos usar en nuestros scripts.
En esta ocasión nos vamos a centrar en las variables relacionadas con el paso de parámetros a nuestro script.

Parámetros

En bash podemos hacer referencia a cada parámetro pasado a un script de forma individual mediante las variables $1, $2, etc, que corresponden con el primer parámetro, segundo parámetro, etc.
Veamos un ejemplo:

jueves, 17 de enero de 2019

Calcular fechas futuras o pasadas con date

Hoy vamos a ver una sencilla forma para calcular fechas futuras o pasadas respecto a la actual en el shell de Linux. Para ello usaremos el comando date.
Por hacer un breve repaso, el comando date devuelve la fecha y hora del momento actual:
$ date
mié ene 16 21:56:23 CET 2019
Podemos modificar el formato de salida para adecuarlo a nuestras necesidades:

lunes, 14 de enero de 2019

Ejecutar funciones bash dentro del comando find

El comando find es muy potente y se usa habitualmente en shell scripts. En ocasiones, se requiere ejecutar una serie de acciones por cada uno de los ficheros encontrados por find y esto puede resultar una tarea imposible. Veamos un ejemplo.
Propósito
Se requiere analizar todos los ficheros con extensión .py ubicados dentro de un directorio para detectar todos aquellos que no contienen la declaración de la codificación de texto utilizada. Para estos ficheros, añadir automáticamente la directiva siguiente:
# -*- coding: latin-1 -*-

jueves, 3 de enero de 2019

Crear un servidor web con un solo comando

Hoy vamos a ver cómo desplegar rápidamente un mini sevidor web para publicar una pequeña web.
Dado que se quiere publicar un fichero html y los requerimientos de la web son básicos, no instalaremos ningún servidor web al uso. Utilizaremos el comando ncat para ofrecer esta funcionalidad.

jueves, 27 de diciembre de 2018

Trabajo con ficheros temporales en bash

En esta entrada vamos a ver una buena forma de gestionar los archivos temporales que se crean en los scripts bash.
Inicialmente, un script que requiera la creación de ficheros temporales podría tener la siguiente forma:
#!/usr/bin/env bash

TMPFILE=/tmp/temporal
df -h > $TMPFILE
free -m >> $TMPFILE
LINEAS=$(wc -l $TMPFILE | cut -d " " -f 1)
echo "$LINEAS lineas"
rm -f $TMPFILE

lunes, 10 de diciembre de 2018

Dando color al terminal #3

Como se ha visto en entradas anteriores del blog, se puede dar formato al texto del terminal para hacerlo más atractivo y llamativo de cara al usuario.
Inicialmente hemos visto cómo dar color al texto. Posteriormente, se vio cómo aplicar negrita, cursiva y subrayar el texto. En la entrada de hoy vamos a ampliar los estilos que se pueden usar para dar formato al texto del terminal.

jueves, 6 de diciembre de 2018

Contar lineas idénticas

Hoy voy a plantear una solución sobre cómo realizar un conteo de lineas idénticas salidas de una aplicación o script.
Pongo un ejemplo, pero este método es aplicable a cualquier otro caso.
Objetivo: se quiere conocer cuántos ficheros hay dentro de un directorio por extensión.
El listado de ficheros se puede realizar fácilmente mediante find:
find . -type f -exec basename {} \;
Ahora vamos a quedarnos solo con la extensión:

lunes, 3 de diciembre de 2018

Dando color al terminal #2

Como vimos en una entrada anterior, dando color al terminal, el terminal de Linux no siempre ha de ser negro sobre blanco. Hoy vamos a ver más formas de dar formato al texto del terminal.

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.