1. Variables d’environnement

La variable PATH contient les chemins dans lesquels le shell cherche les programmes à lancer.

  • Afficher le contenu de cette variable via la commande echo $PATH.
  • Modifier cette variable pour y ajouter le chemin de Desktop : PATH=$PATH:~/Bureau. Exécuter which firefox pour voir le chemin complet du navigateur.
  • Afficher le contenu de PATH dans le terminal courant, dans un terminal fils, dans un terminal disjoint.
  • Utiliser la commande export PATH et afficher le contenu de PATH dans le terminal courant, dans un terminal fils, dans un terminal disjoint.
  • La variable HOME contient le chemin de votre dossier personnel. La variable PWD contient le chemin courant. HOST contient le nom de l’ordinateur courant. RANDOM contient un nombre aléatoire (change à chaque appel). Toutes ces variables se comportent comme PATH : si elles sont exportées, elles se transmettent aux processus fils ; le contenu de la variable est obtenu en le précédant d’un $.

Le fichier .bashrc est lu à chaque démarrage du shell. Si on veut que des réglages se conservent au prochain démarrage, on peut ajouter ces réglages dans ce fichier. Si on y met des commandes, elles seront elles aussi exécutées au démarrage du shell. Par exemple, ajoutons fortune dans le .bashrc. Au prochain lancement de bash, nous serons accueillis par un proverbe.

Il est également possible d’ajouter des raccourcis de commande. Par exemple pour que cd.. fasse l’effet de cd .., on peut ajouter alias cd..="cd ..". On peut aussi ajouter alias ll="ls -ail".

2. Scripts

À l’aide de tubes et redirections, nous pouvons faire des commandes complexes. Si celles-ci sont amenées à être réutilisées, on peut les transformer en scripts qui pourront être réutilisés. Pour celà, on écrit la commande en question dans un fichier dont la première ligne sera #!/bin/sh. On octroie les droits d’exécution sur ce fichier et on l’appelle par la commande ./fichier.

  • Recopiez les lignes suivantes dans un fichier psit.sh

    #!/bin/sh
    
    ps aux | cut -d ' ' -f 1 | sort | uniq

    Exécutez ce script avec ./psit.sh.

  • Écrivez un script comptant les membres de chaque groupe d’utilisateurs (en utilisant la sortie de ypcat passwd).

  • Le symbole $1 représente le premier argument du script. Testez le script suivant avec et sans argument :

    #!/bin/sh
    
    ps aux | grep $1 | tr -s ' ' | cut -d ' ' -f 2

    Nous aimerions maintenant envoyer un signal (avec kill) aux processus repérés par le script précédent. Pour celà, nous allons utiliser la commande kill sur le résultat de cette commande. Il faut entourer cette commande d’accents graves.

  • Modifiez le script précédent comme suit

    #!/bin/sh
    
    kill `ps aux | grep $1 | tr -s ' ' | cut -d ' ' -f 2`

    Que fait-il ?

  • Recopiez le script suivant dans un fichier test_fonts.sh :

    #!/bin/sh
    
    mkdir -p ./Pictures
    cd ./Pictures
    for i in /usr/share/fonts/type1/*/*.pfb; do
        name=`echo $i | sed 's:.*\/::'`
        convert -size 200x50 gradient:none-firebrick \
            -fill white -font $i \
            -draw 'text 2,30 "Portez ce whisky au vieux juge."' \
            "${name}.png";
    done
    ls *.png

    Le for permet d’appliquer un traîtement à un ensemble d’éléments (ici des fichiers qui correspondent au motif /usr/share/fonts/type1/*/*.pfb c’est-à-dire des polices de caractères). sed est un filtre permettant de remplacer du texte. convert permet de manipuler des images en ligne de commande.

  • Lancez ce script. Que produit-il ?

  • Écrivez un script qui à l’aide de la commande convert transforme toutes les images png en jpg, affiche la taille des deux versions puis supprime l’image png. Pourquoi la commande convert *.png *.jpg ne fonctionne-t-elle pas ?

  • Prenons un script au hasard sur internet. Que fait-il ? Il peut être remplacé par une simple ligne de commande, laquelle ?