Scripts bash pour Debian/Ubuntu

De Wiki Dane (ex wikitice)
Aller à : navigation, rechercher

Cet article propose quelques éléments pour réaliser des scripts à lancer sur des système GNU/Linux et plus particulièrement Debian ou Ubuntu.

Les lignes de commande et scripts de cet article ont été testés sur Debian/Squeeze et devraient fonctionner sans problème pour tout système Linux, à part quelques particularités propres aux systèmes basés sur Debian qu'il sera nécessaire d'adapter à d'autres systèmes.


Généralités sur les scripts bash

Documentation

  • Un tutoriel de la documentation Ubuntu.


Création d'un script

La création d'un script bash n'est pas très compliquée. Il suffit de créer un fichier vierge, de lui donner un nom, de l'ouvrir par un double-clic et enfin d'écrire la ligne suivante comme première ligne de ce fichier.

#!/bin/bash

Remarque : il n'est pas nécessaire d'indiquer une extension pour le nom du fichier, la première ligne du fichier est suffisante pour que le système Linux reconnaisse qu'il s'agit d'un script bash.


Édition d'un script

Pour éditer le fichier qui contient le script, il suffit de double-cliquer sur le fichier.

Cela peut aussi se faire en ligne de commande à l'aide d'une des lignes de commande suivantes :

gedit nom_du_script
nano nom_du_script

gedit et nano sont des éditeurs de texte classiques dans les systèmes Debian.


Lancement d'un script

Pour lancer un script, le mieux est de le faire avec une console.

Remarque : selon le type de script, on prendra une console simple ou une console administrateur.

Avant de lancer le script, il est nécessaire de modifier les permissions le concernant et de le rendre exécutable. Cela se fait avec la ligne de commande suivante, si l'on est dans le répertoire contenant le script (sinon, il faudra indiquer le chemin complet du fichier, du style /home/répertoire_utilisateur/chemin/nom_du_script) :

chmod u+x nom_du_script

On peut aussi modifier les permissions en cliquant-droit sur le fichier : on choisit Propriétés, l'onglet Permissions et on coche la case Autoriser l'exécution du fichier comme un programme.

Une fois les permissions ainsi modifiées, le lancement d'un script se fait, par exemple, à l'aide de la ligne de commande suivante, si l'on est dans le répertoire contenant le script :

bash nom_du_script


Exemples de lignes de commandes

Pour mettre au point un script, qui est une suite organisée de lignes de commande, il est judicieux de tester chaque ligne de commande dans une console.

La console sera une console simple ou une console administrateur selon la commande utilisée. Si la ligne est précédée d'un $, une console simple suffira ; si la ligne est précédée d'un #, il sera nécessaire de passer en console administrateur. Bien sûr, ces signes $ et # ne font pas partie de la commande ;-).

Remarque : pour passer d'une console simple à une console administrateur, il suffit de lancer la commande suivante (il vous sera demandé le mot de passe du compte root) :

su

Pour revenir à une console simple, il suffit de lancer la commande suivante :

exit

ou de combiner les touches Ctrl et D (Ctrl+D).


Vous trouverez ci-dessous quelques lignes de commandes qui pourront vous être utiles.


  • Connaître l'adresse IP de la machine
ifconfig eth0 | grep "inet adr" | sed 's/.*adr:\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*/\1/'

adresse que l'on peut mettre dans une variable IP_machine afin de l'exploiter dans un script :

IP_machine=`ifconfig eth0 | grep "inet adr" | sed 's/.*adr:\([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\).*/\1/'`


  • Connaître l'adresse publique du routeur ou du proxy
curl ifconfig.me

adresse que l'on peut mettre dans une variable IP_publique afin de l'exploiter dans un script :

IP_publique=`curl ifconfig.me`


  • Savoir si la machine a un processeur 64 bits ou 32 bits
( grep flags /proc/cpuinfo | grep -q '\<lm\>' ) &&  echo 64 bits || echo 32 bits


  • Savoir si un paquet est installé (par exemple ntp)
dpkg --get-selections | grep -w ^ntp[^-]

si le paquet est installé, vous devriez avoir la ligne suivante :

ntp                           install

si la commande ne retourne rien, c'est que le paquet n'est pas installé. Ainsi, la ligne suivante, dans un script, testera si le paquet est installé et l'installera si ce n'est pas le cas :

[[ -z `dpkg --get-selections | grep -w ^ntp[^-]` ]] && aptitude install ntp


  • chercher un fichier dans le répertoire /home (ici le fichier zip32.dll)
find /home | grep zip32.dll


  • chercher les 10 plus gros fichiers dans le répertoire /home
find /home -type f -exec du -s {} \; | sort -n | tail -n 10

ou bien les 10 plus gros fichiers (de plus de 2 Mo) contenus dans /home (la taille est exprimée en octets) du plus gros fichier (en haut) au moins gros (en bas) :

find /home -type f -size +2M -exec du '{}' \; | sort -nr | head -n 10


  • liste des fichiers modifiés depuis moins d'une minute
find ~ -type f -mmin -1


  • Supprimer des dossiers en masse en sécurité
find /home -type d -regex '/home/[^/]+/profil/appdata/LibreOffice' -exec echo rm -Rf{} \;> supprime_ooo.bash

ensuite, pour voir si tout va bien, il suffit d'inspecter le fichier supprime_ooo.bash qui contient les lignes de suppression des répertoires LibreOffice de chaque utilisateur (on peut faire un test avec une des lignes) ; puis on lance le fichier (à une heure sans utilisateur) pour supprimer les répertoires ainsi listés.


Exemples de scripts bash


On attend vos productions…

Documentation

Voici quelques sites pour plus de détails sur la programmation Bash :

Et sur des commandes utiles :