Scripts

Un script commence par un shebang, doit être exécutable, appelé avec son chemin s’il n’est pas dans le PATH du shell.

Rappels sur les scripts shell

#!/bin/sh

FOO=Bonjour
BAR=${FOO}Monde
echo $BAR

for i in *; do
	echo $(realpath "$i")
done

if [ -d /tmp ]; then
	if ls /tmp | grep 2014; then
		echo Oui
	else
		echo Non
	fi
fi

Exercices

    1. Dans le fichier truc.sh, recopier les lignes suivantes :

      #!/bin/sh
      
      echo "Bonjour"
      echo $0
      echo $1
      echo $2
      echo $#

      Rendre le fichier exécutable et le lancer. L’essayer avec des arguments divers.

      À quoi servent les variables $0, $1, $2 et $# ?

  1. Écrire un script shell qui liste les fichiers contenus dans un chemin donné en argument sans utiliser la commande ls. Les dossiers devront être listés avant les fichiers.

    Indice : on pourra broder sur la boucle for i in *; do echo "$i"; done. Dans cette boucle, * est un glob ; c’est un motif du shell pour capturer les noms de fichiers et dossiers.

  2. Écrire un script myps.sh qui liste les processus lancés (PID, commande, propriétaire) sans utiliser la commande ps.

    Indice : Il faut utiliser /proc vu dans le TP sur FHS

  3. Écrire un script pause.sh chargé de mettre en pause un processus donné par son nom. L’usage de ce script sera ./pause.sh firefox par exemple. Dans cet exemple, le script enverra le signal STOP au processus firefox, patientera 10 secondes puis enverra le signal CONT à ce même processus. (Note : l’utilisation de ps est autorisée)

    1. Écrire un script shell de backup. Il prendra en argument le dossier à sauvegarder. Il archivera, compressera et chiffrera ce dossier. Puis il enverra l’archive chiffrée sur un serveur connu. Une fois l’archive envoyée sans erreur, il supprimera les fichiers intermédiaires, et sur le serveur ne conservera que les 3 backups les plus récents.

      On utilisera tar pour l’archivage/compression ; openssl bf pour le chiffrement ; le nom de l’archive chiffrée devra contenir la date et l’heure du backup.

    2. Écrire un script de rollback qui récupèrera le backup le plus récent et le décompressera dans un dossier donné en argument au script.

    3. Planifier une sauvegarde tous les jours à 13h.

  4. Écrire un script shell qui explorent /var/log en cherchant dans tous les fichiers non gzippés les IPs qui apparaissent. Énumérent ces IPs et les fichiers où elles apparaissent.

Références