Scripts básicos en BASH


En esta nueva entrada incluiré algunos scripts básicos en BASH para los que recién comienzan a utilizar la consola de Linux. Intentaré detallar cada línea de código para que el script sea fácil de entender.

Los scripts

El script siempre debemos comenzarlo con la linea #!/bin/bash, ya que le dice al shell con qué programa interpretarlo. En este caso, los scripts serán interpretados por el shell BASH.

Para guardar el script, lo haremos con la extension .sh. Por ejemplo: nombrescript.sh.

Para ejecutar el script, lo haremos con el comando bash de esta forma: bash nombrescript.sh

Muestra mensaje en pantalla

El siguiente script básicamente mostrará un mensaje en pantalla, nada más.

#!/bin/bash
echo Mensaje en pantalla

La salida del script es la siguiente:

root@kali:~/scripts# bash basico1.sh
Mensaje en pantalla

Lee variable y la muestra

La primera linea nos pide ingresar un nombre que se guardará en la variable nombre.

La segunda linea será la salida con un texto más el contenido de la variable nombre.

#!/bin/bash
read -p “Ingrese un nombre: ” nombre
echo “Usted ha ingresado el siguiente nombre:” $nombre

La salida del script es la siguiente:

root@kali:~/scripts# bash basico2.sh
Ingrese un nombre: Francisco Molina
Usted ha ingresado el siguiente nombre: Francisco Molina

Verificar si un directorio existe

En la primera linea solicitamos la ruta del directorio y la guardamos en la variable VAR.

La segunda linea es un condicional (si = if) en el cual consultamos si la variable VAR cuyo contenido es la ruta de un directorio, es un directorio. Si lo es, entonces va a la tercera linea mostrando el texto existe.

La linea else es para decir que si lo anterior no se cumple, entonces haremos lo que sigue en la siguente linea. En esta linea mostrará el texto que el directorio no existe.

Con fi se cierra el condicional.

#!/bin/bash
read -p "Ingrese la ruta absoluta del directorio: " VAR
if [ -d $VAR ]; then
echo "El directorio existe"
else
echo "El directorio no existe"
fi

El resultado a mostrar dependerá de si realmente la ruta que ingresamos es un directorio o no. Por ejemplo:

root@kali:~/scripts# bash basico3.sh
Ingrese la ruta absoluta del directorio: /root/scripts
El directorio existe
root@kali:~/scripts# bash basico3.sh
Ingrese la ruta absoluta del directorio: /root/scropts
El directorio no existe

Ejecuté 2 veces el script. En el primero ingresé la ruta al directorio de scripts y la salida señala que existe el directorio. En la segunda ejecución ingreso mal el nombre del directorio, por lo cual el mensaje mostrado es que ese directorio no existe.

Respaldo de directorio

Empaqueto el contenido del directorio scripts en la primera linea. Luego en la segunda lo comprimo con gzip.

#!/bin/bash
tar -cvf /tmp/scripts.tar /root/scripts
gzip /tmp/scripts.tar

La salida es la siguiente:

root@kali:~/scripts# bash basico4.sh
tar: Eliminando la `/' inicial de los nombres
/root/scripts/
/root/scripts/basico2.sh
/root/scripts/basico1.sh
/root/scripts/basico3.sh
/root/scripts/basico4.sh

Y el archivo estará guardado en la ruta /tmp con el nombre scripts.tar.gz

En la salida aparecen los archivos que se empaquetaran. Para ocultarlos, sólo hay que eliminar la opción v del comando tar quedando así: tar -cf /tmp/scripts.tar /root/scripts

También aparece el siguiente mensaje: “tar: Eliminando la `/’ inicial de los nombres”. Para que no lo muestre, podemos mandar la salida al nul de la siguiente forma:  tar -cf /tmp/scripts.tar /root/scripts 2>/dev/null

Verifica privilegios de usuario por EUID

Primero se deberá consultar el EUID del usuario. Podemos hacerlo con el comando echo $EUID. El resultado para el usuario root será 0.

La primera linea consulta si el EUID del usuario actual NO es igual a 0 (0 = a root). Si no es root, muestra la siguiente linea con el respectivo mensaje. Si es root, se ejecuta el script.

#!/bin/bash
if [ $EUID -ne 0 ]; then
echo “Este script debe ser ejecutado por el usuario root” 1>&2
exit 1
else
echo “El script se ejecuta”
cal
fi

La salida del script para un usuario normal es la siguiente:

francisco@kali:/root/scripts$ bash basico5.sh
Este script debe ser ejecutado por el usuario root

La salida para el usuario root es la siguiente:

root@kali:~/scripts# bash basico5.sh
El script se ejecuta
Septiembre 2018
do lu ma mi ju vi sá
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

Muestra el mensaje y abre el calendario.

En la segunda linea aparece el siguiente texto 1>&2. Acá le decimos al script que las salidas estándar se redireccionen a la salida de error.

Verifica privilegios de usuario por nombre de usuario

Primero declaro la variable autorizado con el nombre de usuario al que quiero autorizar. Luego consulto si el usuario actual NO es igual que el usuario autorizado. Si no es igual se muestra el mensaje (y se termina el script con exit 1) y si lo es se ejecuta el script.

#!/bin/bash
autorizado=”francisco”
if [ $USER != $autorizado ]; then
echo “Este script debe ser ejecutado por $autorizado” 1>&2
exit 1
else
echo “El script se ejecuta, porque eres $autorizado”
fi

La salida para usuario no autorizado:

root@kali:~/scripts# bash basico6.sh
Este script debe ser ejecutado por francisco

La salida para usuario autorizado

francisco@kali:/root/scripts$ bash basico6.sh
El script se ejecuta, porque eres francisco