Comment faire pour cree un script BASH 2020

 

Pensant que cela pourrait ressembler à cela, BASH ne fait pas partie de ces légendes qui apparaissent (avec Ooff! Et Biff!) Lorsque Batman et Robin combattent les méchants dans l’émission de télévision des années 60. BASH signifie en fait Bourne Again Shell. La raison de ce nom remonte à Steve Bourne qui a écrit le Bourne Shell original pour Unix. Lorsque le GNU a créé un équivalent de logiciel libre, ils l’ont nommé d’après le shell de Steve et ont ajouté un petit jeu de mots sur son nom de famille.

Si vous êtes un administrateur système, la création de scripts BASH sera l’une de ces choses obligatoires. Mais loin d’être une corvée, vous apprendrez que cela vous facilitera grandement le travail et la vie.

Notre premier script BASH

La première chose dont un script BASH a besoin est le proverbe «shebang». Ce sont deux personnages:

Code:
#!

Ensuite, vous devez inclure le chemin d’accès à l’interpréteur BASH. La première ligne de votre script devrait donc ressembler à ceci:

Code:
#!/bin/bash

Si votre shell par défaut est BASH, la ligne:

Code:
#!/bin/sh

fait la même chose. C’est juste un lien symbolique vers / bin / bash. Mais si votre shell par défaut n’est pas BASH, vous n’invoquerez pas / bin / bash si vous écrivez un script shell avec cette première ligne. Étant donné que sur les systèmes Linux, BASH est normalement le shell par défaut, vous verrez que la plupart des scripts BASH commencent par

Code:
#!/bin/sh

À partir de là, vous êtes libre de faire ce que le shell permet. Les scripts shell créés à des fins d’administration (qui constituent la majorité des scripts) sont constitués de lignes qui appellent d’autres commandes. Regardons un exemple simple. Disons que vous avez des utilisateurs de messagerie sur votre système, mais vous n’avez pas de quota en place. Néanmoins, vous souhaitez surveiller la taille des boîtes aux lettres pour vous assurer que les gens n’occupent pas plus d’espace qu’ils ne le devraient. Ce script, exécuté à partir de crontab, ferait bien l’affaire:

À l’exception du shebang, les lignes de commentaires commencent par #

Code:
#!/bin/sh
 
# show us the size of email spools email spools
# date in YYYY-MM-DD format
today=`date +%Y-%m-%0e`;
# subject and recipient variables
subject="Mailcheck";
sendto="admin@linux.ork";
cd /var/spool/mail
ls -lSh | awk '{print $5, $9}' | grep "(G|M)" | mail -s $subject-$today $sendto
# end script

Tout d’abord, vous verrez que nous avons déclaré certaines variables. Ces variables ne sont préfixées par aucun caractère lorsqu’elles sont déclarées mais elles sont préfixées par le signe dollar ($) lorsqu’elles sont utilisées. Vous avez également remarqué que les variables peuvent être d’autres commandes, comme dans cet exemple avec la commande date. Lorsque vous utilisez une commande en tant que variable, elle doit être placée à l’intérieur de backticks (` `).

Tout d’abord, le script passe dans le répertoire où se trouvent les spools de messagerie. Le script effectue un «ls» avec des options et présente une liste où les plus grands spools sont affichés en premier avec leur taille au format lisible par l’homme. Ceci est dirigé vers awk, qui trie la taille et le nom d’utilisateur.

La sortie awk est recherchée pour les spools qui se trouvent dans les mégaoctets et les gigaoctets. Ceci est ensuite canalisé vers la commande «mail» et envoyé au compte administrateur avec le sujet plus la date que nous avons déclarée dans ces variables. L’administrateur aura alors une belle liste triée de ceux qui utilisent le plus d’espace dans / var / spool / mail.

Variables intégrées

Bien que nous ayons créé nos propres variables dans l’exemple précédent, BASH est également livré avec ce que l’on appelle des invariables construites. Voici un exemple de script avec des variables intégrées fréquemment utilisées.

Code:
#!/bin/sh
 
echo "You are user $UID on $HOSTNAME"
echo "Your home directory is: $HOME"
echo "$HOSTNAME is running $OSTYPE"

La sortie de ce script devrait produire quelque chose de similaire à ceci:

You are user 500 on penguin.linux.ork
Your home directory is: /home/mike
penguin.linux.ork is running linux-gnu

Comme vous pouvez le voir, nous n’avons pas eu à déclarer auparavant aucun de ces éléments. C’est pourquoi elles sont connues sous le nom de variables intégrées. Leur utilisation vous fera gagner beaucoup de temps dans l’écriture de vos scripts. Vous pouvez trouver une liste complète des variables intégrées dans le Manuel de référence GNU BASH

Scripts interactifs

Bien que nous ayons mentionné que l’utilisation principale des scripts BASH est l’automatisation des tâches administratives, il peut arriver que vous ayez besoin que les utilisateurs interagissent avec les scripts. Si vous souhaitez qu’un utilisateur saisisse des informations, vous devez utiliser la variable variableread. Jetons un coup d’œil à l’exemple suivant:

Code:
#!/bin/sh
 
echo -n "Enter the name of a city: "
read CITY
echo -n "$CITY is "
case $CITY in
London | Paris | Berlin | Rome) echo -n "in Europe";;
'New York' | Chicago | Washington) echo -n "in The USA";;
Tokyo | Bejing | Bangalore) echo -n "in Asia";;
*) echo -n "some place - but I don't know where";;
esac

Comme vous pouvez le voir, nous avons déclaré une variable qui dépendra de ce que l’utilisateur saisira lorsqu’il sera invité à entrer le nom d’une ville. Après, nous avons plusieurs options pour chaque cas. Si l’utilisateur tape le nom d’une ville que nous avons envisagée ici, il / elle recevra un message indiquant où se trouve la ville. Sinon, le script affichera un message indiquant qu’il ne sait pas où se trouve la ville. Toute réponse est représentée par l’astérisque (*)

Assurez-vous d’avoir ce dont vous avez besoin

Si vous devez manipuler le contenu d’un fichier, c’est une bonne idée de vérifier si ce fichier existe en premier. Voici une routine BASH simple pour ce faire en utilisant la commande if:

Code:
#!/bin/sh
 
if test -f /var/log/mail.log; then
printf "The file existsn";
fi

 

C’est une bonne idée, car cela rendrait votre script inutile si vous l’aviez configuré pour manipuler un fichier qui n’existait pas.

If Loops: un exemple pratique

J’ai été professeur d’anglais à temps plein en tant que professeur de langue étrangère pendant 12 ans, je ne peux donc pas résister à vous donner cet exemple de test à choix multiples utilisant un script BASH.

 

Code:
#!/bin/sh
 
PS3="Choose the number of the correct word to fill in the blank: "
echo "The emergency brake let go and car rolled ______ the hill"
select SENT1 in up down along beside
do
if [ "$SENT1" == "" ]; then
echo -e "You need to enter somethingn"
continue
elif [ "$SENT1" != down ]; then
echo -e "Sorry. Incorrectn"
echo "1. Incorrect" >> eoiexam.dat
elif [ "$SENT1" == down ]; then
echo -e "Great!n"
echo "No. 1 - Correct" >> eoiexam.dat
break
fi
done

 

Le script utilise la routine «elif» pour trier les réponses qui ne sont pas correctes. Vous remarquerez également qu’il écrit les résultats, qu’ils soient corrects ou non, dans un fichier.

Source en Englais:Programmation en BASH

Leave a Reply