Scripts bash

De WindowsLinux.net - Astuces pour Windows et Linux !.

Sommaire

Variables d'environnement

Sous linux certaines variables d'environnement sont déjà définies. Pour les afficher, utiliser la commande printenv.

$ printenv


Caractères d'échappement

Caractère d'échappement
Nom
Résultat
\n
newline
Ajoute des lignes blanches au texte.
\t
tab
Insére des lignes horisontales au texte
\a
alert
Fait biper le terminal
\\
antislash
Insére un antislash
\f
formfeed
Envoie à votre imprimante un signal d'éjection.

Exit

Afin de faire un script propre, il est conseillé de définir le status du script quand il se termine, la commande exit interromp le script immédiatement.

Exemple :

exit 0

Termine le script et lui donne le status "0" (succés), à l'inverse de :

exit 1

Termine votre script et lui donne le status de "1" (échec).

Exemple : tester root

La commande "id -u" donne le numéro ID de l'utilisateur courant. Root à le numéro 0.

if [ $(id -u) != "0" ]; then
    echo "You must be the superuser to run this script" >&2
    exit 1
fi

>&2 envoie les erreurs hors de la console courante.

Autre(s) variables

$ echo $HOSTNAME

vous retourne le nom de votre machine.

Exemples

Boucle

Voici quelques exemples pour faire des boucles :

for I in {1..10}; do echo $I; done
for I in 1 2 3 4 5 6 7 8 9 10; do echo $I; done
for I in $(seq 1 10); do echo $I; done
for ((I=1; I <= 10 ; I++)); do echo $I; done


for ((I=1; I <= 29 ; I++)); do
echo `printf "node%02d\n" $I`;
done


Créer un fichier HTML

1er exemple

#!/bin/bash
 
 # creer_page - Un script pour créer un fichier HTML
 
 title="Informations système pour"
 
 cat <<- _EOF_
    <HTML>
    <HEAD>
        <TITLE>
        $title $HOSTNAME
        </TITLE>
    </HEAD>
    <BODY>
    <H1>$title $HOSTNAME</H1>
    Par $USER
    </BODY>
    </HTML>
 _EOF_

2nd exemple

#!/bin/bash
 
# creer_page - Un script pour créer un fichier HTML
 
##### Constants
 
TITLE="Informations système pour $HOSTNAME"
RIGHT_NOW=$(date +"%x %r %Z")
TIME_STAMP="Mis a jour $RIGHT_NOW by $USER"
 
##### Main
 
cat <<- _EOF_
  <html>
  <head>
      <title>$TITLE</title>
  </head>
 
  <body>
      <h1>$TITLE</h1>
      <p>$TIME_STAMP</p>
  </body>
  </html>
_EOF_


if [ $(id -u) != "0" ]; then
    echo "You must be the superuser to run this script" >&2
    exit 1
fi

3ème exemple

Utiliser le texte entré au clavier :

#!/bin/bash
echo "Votre prénom :"
read prenom
echo "Bonjour $prenom !"
exit 0

Lors de la ligne read, le script est mis en pause, et l'entrée du clavier passe dans la variable choisie.

Lire un fichier ligne par ligne

Fichier de départ :

Ceci est la ligne n° 1
Ceci est la ligne n° 2
Ceci est la ligne n° 3
Ceci est la ligne n° 4
Ceci est la ligne n° 5


Ligne de commande :

while read line; do echo -e "$line\n"; done < file.txt


Script bash :

#! /bin/bash
 
while read line
do 
   echo -e "$line\n"
done < file.txt

Sortie à l'écran :

Ceci est la ligne n° 1

Ceci est la ligne n° 2

Ceci est la ligne n° 3

Ceci est la ligne n° 4

Ceci est la ligne n° 5

Lecture d'un fichier structuré

Lecture du fichier /etc/passwd et affichage avec variables :

#! /bin/bash
 
while IFS=: read user pass uid gid full home shell
do
echo -e "$full :\n\
	Pseudo : $user\n\
	UID :\t $uid\n\
	GID :\t $gid\n\
	Home :\t $home\n\
	Shell :\t $shell\n\n"
done < /etc/passwd

ou en une ligne unique :

while read i; do echo -e "Paramètre : $i"; done < <(echo -e "a\nab\nc")

Afficher un fichier sans les commentaires

grep -E -v '^(#|;|$|[ ]*#)' /etc/samba/smb.conf

ou encore :

sed -e '/^[ ]*#/d' -e '/^[ ]*;/d' -e '/^$/d' /etc/samba/smb.conf

Observer l'exécution de votre script

Pour plus d'informations, voir l'article Bash et Bashdb.



Pour observer l'exécution de votre script, ajoutez "-x" à la première ligne de votre script, afin d'avoir ceci :

#!/bin/bash -x
      

La commande "set" peut aussi être utilisée avec l'option "-x" pour avoir le même résultat :

#!/bin/bash
 
number=1
 
set -x
if [ $number = "1" ]; then
    echo "Number equals 1"
else
    echo "Number does not equal 1"
fi
set +x


Arrêter le script lors d'une erreur

Si on désire qu'en cas d'échec d'une commande l'exécution du script s'arrête, plutôt que de continuer avec des erreurs, il suffit d'activer l'option suivante :

set -e

Pour désactiver cette option :

set +e


On peut aussi utiliser la ligne suivante :

command || { echo "Erreur"; exit 1; }

Les variables

Si une variable n'est pas initialisée, on peut aussi arrêter le script, par l'utilisation de la commande suivante :

set -u

Liens

Internes

Commandes de base sous linux

Script init.d

Externes

http://tldp.org/LDP/abs/html/

http://linuxcommand.org/writing_shell_scripts.php

http://linuxcommand.org/wss0110.php


Un autre lien, très intéressant pour débuter :

http://www.faqs.org/docs/Linux-HOWTO/Bash-Prog-Intro-HOWTO.html


Enfin, de nombreuses informations sur les commandes grep, cut, tr, sed:

http://www.linux-kheops.com/doc/cours/jgourdin/shell-scripts/filtres.html

Outils personnels