Scripts shell utiles dans n'importe quel programme

Bash est un programme informatique dont la fonction est d'interpréter des commandes. Basé sur le shell Unix , il a été développé pour le projet GNU et est l'interpréteur de commandes par défaut dans la plupart des distributions GNU/Linux . Son nom est un acronyme de Bourne-Again Shell , un jeu de mots (born-again signifiant renaissance) faisant référence au shell Bourne (sh) , qui fut l'un des premiers interpréteurs Unix importants.

Aujourd'hui, nous allons vous présenter quelques scripts shell qui peuvent s'avérer très utiles aux développeurs. La plupart fonctionnent avec n'importe quel shell Unix , bien que certains nécessitent l'utilisation spécifique de Bash.

Empêcher les utilisateurs non privilégiés d'exécuter le script

Certains scripts effectuent des tâches administratives, nous pouvons donc souhaiter que seul l'utilisateur root exécute le script. Dans ce cas, nous pouvons utiliser quelque chose comme ceci:

#!/bin/bash
if [[ $EUID -ne 0 ]]; then
echo "Este script debe ser ejecutado por el usuario root" 1>&2
exit 1
fi

Autoriser l'exécution du script uniquement à un utilisateur spécifique

Semblable au code ci-dessus, nous pouvons souhaiter qu'un seul utilisateur spécifique exécute le script. Nous le faisons:

#!/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

Vérifiez qu'un service / processus est en cours d'exécution

Si nous voulons savoir si des processus d'un service ou d'un programme sont en cours d'exécution, nous pouvons utiliser ce script (dans ce cas, il vérifie que le démon Apache est en cours d'exécution) :

#!/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

Créer un fichier de verrouillage

Parfois, nous devons nous assurer que le script ne s'exécute pas deux ou plusieurs fois simultanément. Pour cela, nous pouvons utiliser les fichiers de verrouillage. Ceci est une version simple d'un script qui nous permet de faire ceci:

#!/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

Dans ce cas, le script vérifie l'existence du fichier `loquesea.lock` . S'il existe, il n'exécute pas ses tâches. S'il n'existe pas, il le crée, exécute les tâches nécessaires, puis le supprime. Cependant, cette méthode n'est pas totalement fiable. Que se passerait-il si le script était brutalement interrompu pendant son exécution ?

Dans ce cas, le fichier de verrouillage ne serait pas supprimé et ne nous permettrait donc pas de réexécuter le script. Pour couvrir ces cas, nous pourrions utiliser la commande trap qui nous permet d'exécuter des commandes au cas où notre script se terminerait de manière inattendue. Il s'agit d'une version plus avancée qui enregistre également le PID du script qui l'exécute dans le fichier de verrouillage:

#!/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

Comprenons un peu mieux la commande `trap` . Sa syntaxe est la suivante : `trap commande signal [signal …];`, où `signal` est le signal de terminaison à capturer. Pour afficher la liste des signaux disponibles, utilisez la commande `kill -l`. Dans l'exemple précédent, les signaux utilisés étaient `INT` (capture du signal de terminaison produit par Ctrl+C) , `TERM` (terminaison produite par la commande `kill`) et `EXIT` (terminaison normale du script, soit parce qu'il n'y a plus de lignes à exécuter, soit parce qu'il rencontre la commande `exit`).

Menu options

Pour créer un menu dans lequel nous permettons à l'utilisateur de sélectionner une série d'options, nous pouvons utiliser le schéma suivant:

#!/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

Demander une confirmation avant d'exécuter un script

Parfois, il est utile que l'utilisateur confirme l'exécution d'un lot d'instructions, c'est-à-dire le message typique qui demande à l'utilisateur de taper oui ou non. Nous pouvons faire ceci comme ceci:

#!/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"

Fin de l'article. Tout simplement génial 

Édit : Je dois faire attention aux espaces et aux tabulations, car pour une raison quelconque, je ne les utilise pas correctement ¬¬


Ajouter comme source préférée dans Google