Scripts

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

  1. Tester et interpréter le code suivant.

    #!/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 0; then
    		echo Oui
    	else
    	    touch /tmp/2024
    		echo Non
    	fi
    fi
  2. Dans un 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 $# ?

  3. É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.

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

    Indice : on peut utiliser /proc.

  5. É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.

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