Bash è un programma per computer la cui funzione è interpretare i comandi. È basato sulla shell Unix ed è stato scritto per il progetto GNU , essendo l'interprete di comandi predefinito nella maggior parte delle distribuzioni GNU/Linux . Il suo nome è un acronimo di Bourne-Again Shell , un gioco di parole (born-again significa rinascita) che fa riferimento alla shell Bourne (sh) , uno dei primi importanti interpreti Unix.
Oggi vi mostreremo alcuni script di shell che possono essere molto utili per gli sviluppatori. La maggior parte di essi funziona in qualsiasi shell Unix , anche se alcuni richiedono l'esecuzione specifica di Bash.
Impedisci agli utenti non privilegiati di eseguire lo script
Alcuni script eseguono attività amministrative, quindi potremmo desiderare che solo l'utente root esegua lo script. In tal caso possiamo usare qualcosa del genere:
#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "Este script debe ser ejecutado por el usuario root" 1>&2
exit 1
fi
Consenti l'esecuzione dello script solo a un utente specifico
Simile al codice sopra, potremmo desiderare che solo un utente specifico esegua lo script. Lo facciamo così:
#!/bin/bash
AUTHORIZED_USER="usuario_permitido"
if [ $USER != $AUTHORIZED_USER ]; then
echo "Este script debe ser ejecutado por el usuario $AUTHORIZED_USER" 1>&2
exit 1
fi
Verificare che un servizio / processo sia in esecuzione
Se vogliamo sapere se sono in esecuzione processi di un servizio o di un programma, possiamo usare questo script (in questo caso, verifica che il demone Apache sia in esecuzione) :
#!/bin/sh
SERVICE='httpd'
if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
echo "El servicio $SERVICE esta ejecutandose"
else
echo "Chanfle! El servicio $SERVICE esta detenido"
fi
Crea un file di blocco
A volte dobbiamo assicurarci che lo script non venga eseguito due o più volte contemporaneamente. Per questo possiamo utilizzare i file di blocco. Questa è una semplice versione di uno script che ci permette di fare questo:
#!/bin/bash
lockfile=/var/lock/loquesea.lock
if [ ! -e $lockfile ]; then
touch $lockfile
echo "hago muchas cosas importantes aqui"
rm $lockfile
else
echo "ya hay otro proceso corriendo"
fi
In questo caso, lo script verifica se il file `loquesea.lock` esiste. Se esiste, lo script NON esegue le sue operazioni. Se non esiste, crea il file, esegue le operazioni necessarie e poi lo elimina. Tuttavia, questo metodo non è del tutto affidabile. Cosa succederebbe se il nostro script venisse chiuso bruscamente mentre è in esecuzione?
In tal caso il file di blocco non verrebbe cancellato e quindi non ci consentirebbe di eseguire nuovamente lo script. Per coprire questi casi, potremmo utilizzare il comando trap che ci consente di eseguire comandi nel caso in cui il nostro script termini in modo imprevisto. Questa è una versione più avanzata che salva anche il PID dello script che lo esegue all'interno del file di blocco:
#!/bin/bash
lockfile=/var/lock/loquesea.lock
if ( set -o noclobber; echo "$$" > "$lockfile") 2> /dev/null;
then
trap 'rm -f "$lockfile"; exit $?' INT TERM EXIT
echo "hago muchas cosas aqui tranquilamente"
rm -f "$lockfile"
trap - INT TERM EXIT
else
echo "Ya hay otro proceso de este script ejecutandose"
echo "corriendo con el PID: $(cat $lockfile)"
fi
Cerchiamo di capire meglio il comando `trap` . La sua sintassi è sostanzialmente questa: `trap comando segnale [segnale …];` dove `segnale` è il segnale di terminazione che si desidera catturare. Per visualizzare un elenco dei segnali disponibili, è possibile eseguire il comando `kill -l`. Nell'esempio precedente, i segnali utilizzati erano `INT` (cattura il segnale di terminazione prodotto da Ctrl+c) , `TERM` (terminazione prodotta dal comando `kill`) e `EXIT` (terminazione normale dello script, sia perché non ci sono più righe da eseguire, sia perché incontra il comando `exit`).
Menu Opzioni
Per creare un menu in cui permettiamo all'utente di selezionare una serie di opzioni possiamo utilizzare il seguente schema:
#!/bin/bash
clear
while :
do
echo " Escoja una opcion "
echo "1. quien soy?"
echo "2. cuanto espacio tengo"
echo "3. que es esto?"
echo "4. Salir"
echo -n "Seleccione una opcion [1 - 4]"
read opcion
case $opcion in
1) echo "este eres:";
whoami;;
2) echo "tienes esto";
df;;
3) uname -r;;
4) echo "chao";
exit 1;;
*) echo "$opc es una opcion invalida. Es tan dificil?";
echo "Presiona una tecla para continuar...";
read foo;;
esac
done
Chiedi conferma prima di eseguire uno script
A volte è utile che l'utente confermi l'esecuzione di un batch di istruzioni, ovvero il tipico messaggio che chiede all'utente di digitare sì o no. Possiamo farlo in questo modo:
#!/bin/bash
while true; do
echo
read -p "esta seguro de hacer lo que sea que vaya a hacer " yn
case $yn in
yes ) break;;
no ) exit;;
* ) echo "por favor responda yes o no";;
esac
done
echo "si se ejecuta esto es que aceptaste"
Fine dell'articolo. Semplicemente fantastico
Modifica: Devo stare attento agli spazi e alle tabulazioni, perché per qualche motivo non li uso correttamente ¬¬