Programaci贸n Shell

Apuntes sobre programaci贸n shell.

Ejecutar scripts

Agregar shebang, es la primera linea del script y es el path absoluto del int茅rprete de comandos

#!/bin/bash

Para encontrar el path a tu shell

which bash

Ejemplo de script b谩sico

#!/bin/bash
echo "Hoy es " `date`

echo -e "\ningresa la ruta al directorio"
read the_path

echo -e "\n tu ruta tiene los siguientes archivos y carpetas: "
ls $the_path

Para hacer el script ejecutable, asigna permisos de ejecuci贸n

chmod u+x script.sh

Ejecutar el script

bash script.sh
sh script.sh
./script.sh

Comentarios

Los comentarios empiezan con #, Ejemplo:

# Esto es un comentario

Variables

# Asigancion
nombre=valor
# Uso
echo $nombre

Entradas y salidas en scripts

Entradas

  1. Leer la entrada del usuario y almacenarlo en una variable, usamos read
#!/bin/bash
echo -e "Introduce un n煤mero"
read number
echo -e "\n El numero introducido es: $number"
  1. Leer un archivo
#!/bin/bash
while read linea
do
   echo $linea
done < input.txt
  1. Argumentos

Los argumentos se indican con $x donde x es el orden del argumento

#!/bin/bash
echo "Hello, $1 $2!"

A la hora de ejecutar el script le pasas los argumentos

bash script.sh Rub茅n Gonz谩lez
# Output: Hello, Rub茅n Gonz谩lez

Salidas

  1. Imprimir por terminal
echo "Hola mundo"
echo -e "Hola mundo\nQue tal??" # Para interpretar saltos de l铆neas y otros car谩cteres especiales
  1. Escribir a un archivo
echo "Esto es un texto" > output.txt
  1. Adjuntar a un archivo
echo "Esto es un texto" >> output.txt
  1. Redireccionando la salida

  2. Escribir a un archivo

ls > files.txt

Condicionales

if - elif - else

#!/bin/bash
echo "Por favor ingresa un numero: "
read num
if [ $num -gt 0 ]; then
  echo "$num es positivo"
elif [ $num -lt 0 ]; then
  echo "$num es negativo"
else
  echo "$num es cero"
fi
if [ $num -gt 0 -a $num -le 17 ]
   echo -e "\nEres menor de edad"
fi

case

#!/bin/bash
fruta="manzana"
case $fruta in
    "manzana")
        echo "Este es una fruta roja."
        ;;
    "banana")
        echo "Este es una fruta amarilla."
        ;;
    "orange")
        echo "Este es una fruta naranja."
        ;;
    *)
        echo "Fruta desconocida."
        ;;
esac

Bucles

while

#!/bin/bash
i=1
while [[ $i -le 10 ]] ; do
   echo "$i"
   (( i += 1 ))
done

bucle for

#!/bin/bash
for i in {1..5}
do
   echo $i
done

Depuraci贸n

Establecer la opci贸n set -x

Establecer set -x al cominezo del script imprimir谩 que l铆nea esta ejecutando en cada momento

#!/bin/bash
set -x

# Resto del script

Establecer la opci贸n set -e

Si quieres que tu escript salga inmediatamente cuando falle, usa la opcion set -e.

#!/bin/bash
set -e

# Resto del script

Verificar el c贸digo de salida

Cuando bash encuentra un error, pone un c贸digo de salida que indica la naturaleza del error. Puedes verificar el c贸digo de salida del comando m谩s reciente usando la variable $?. Un valor de 0 inica 茅xito, mientras que cualquier otro valor indica un error.

Logs de cron

Puedes encontrar los logs de cron en:

/var/log/syslog