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écuterwhich 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 variablePWD
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 commandekill
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 commandeconvert *.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 ?