|
Shells et shell-scripts
Le bourne shell conçu par Steve Bourne en 1970 a été remplacé par le shell bash (Bourne Again SHell) qui est devenu le standard sous
Linux et est inclu dans toutes les distributions. Mais vous pouvez utiliser un autre Shell, voir même un shell différent pour chaque utilisateur.
1.1-Différents shells
| shell | chemin | invite | link |
| bash |
/bin/bash |
# |
/bin/sh |
| tcsh |
/bin/tcsh |
> |
/bin/csh |
| ash |
/bin/ash |
$ |
|
| zsh |
/bin/zsh |
% |
|
|
L'invite (prompt) "#", s'obtient en définissant les valeurs de la variable PS1, soit dans le
fichier /etc/profile ou $HOME/.bash_profile, comme suit :
PS1='\h \W \# ' , ce qui correspond à \nom_de machine\répertoire_courant\ #
|
Si vous voulez tester les différents shells, vous pouvez créer autant de comptes utilisateurs que vous avez de shells
et en attribuer un différent à chaque utilisateur.
Les shells bash et tcsh reconnaissent un login shell des autres shells. Login shell, c'est quoi ?
Le login shell est le shell appelé au lancement du système, par la suite si vous (ou plutot les applications) faites appel à un
shell : Ce ne sera pas le login shell mais une seconde instance du shell.
|
|
1.2-Notion sur le shell
Vous discutez avec vôtre système par l'intermédiaire d'un interpréteur de commandes : Le shell.
_La commande echo : Elle dirige les messages vers l'écran (affichage). La preuve ? essayez :
# echo Salut
essayez aussi :
# echo HOME
On peut lui demander de nous afficher le contenu d'une variable ! Essayez :
# echo $HOME
La varialble PS1 : Elle définit l'invite principale de vôtre shell :
Pour connaitre ses parametres faites donc :
# echo $PS1
Vous devez avoir quelque chose comme : \h:\w\$ cela correspond à hostname : chemin invite.
essayez :
# PS1="Salut droopy"
et pour remettre l'invite par défaut vous devez retaper ce que 'echo $PS1' vous a indiqué.
# PS1="\h:\w\$"
La variable PATH : C'est la variable d'environnement qui permet au système de savoir où trouver vos commandes (/bin/...binaires).
Par exemple lorsque vous lancer la commande ls, le système va la chercher dans /bin/ls .
Cette variable est défini dans le fichier /etc/profile et ne concerne que les binaires, dont le chemin peut-être :
/bin/
/usr/bin/
/usr/local/bin/
... ou presque... mais...
Pour savoir ce qui est défini dans vôtre PATH :
# echo $PATH
En plus de ces répertoires il y a dans le PATH un point '.' qui signifie 'répertoire courant'.
Ce qui vous permet de lancer vos shell-scripts depuis leur répertoire (sans avoir à les placer dans un
des répertoires de binaires) : Si ce point '.' n'existe pas dans le PATH, vous ne pourrez pas lancer
vos shell-scripts depuis leur répertoire (courant), sauf en faisant précéder la commande par " ./ ".
|
|
1.3-Les shell-scripts
Un shell-script ( ou un script shell ),qu'est-ce que c'est ?
Par exemple, en supposant que vôtre CD-Rom soit vôtre disque /dev/hdc (E:) et qu'il soit monté sous /cdrom/, et
si vous devez monter sa partition en entrant la commande suivante :
# mount -t iso9660 -o ro /dev/hdc /cdrom
Au préalable vérifier le lien symbolique de /dev/cdrom vers /dev/hdc :
# ls -l /dev/cdrom
Si ce lien n'existe pas vous devez le créer :
# rm -f /dev/cdrom détruire /dev/cdrom s'il existe mais ne pointe pas vers /dev/hdc
# ln -sf /dev/hdc /dev/cdrom
Ne pas oublier de créer le répertoire /cdrom/ :
# mkdir /cdrom
Et vous pouvez alors, pour monter le CD-Rom taper :
# mount -t iso9660 -o ro /dev/cdrom /cdrom
Maintenant vous pouvez écrire un script pour automatiser le montage du CD-Rom.
Oui !.. Avec vos petits doigts et un éditeur..!
«cdon» sera le nom du script suivant:
tapez # jed /droopy/cdon (ou vi /droopy/cdon, ou emacs /droopy/cdon) et écrivez ce qui suit :
#!/bin/sh
# /sbin/cdon montage de mon CDRom
# placer le script cdon avec les binaires dans /sbin/ (ou mieux dans $HOMME/bin/ ou encore /usr/local/bin/)
#
echo ' Montage du CD-Rom'
mount -t iso9660 -o ro /dev/cdrom /cdrom
#
echo 'Fin du montage'
ls /cdrom
# Fin du script cdon
Note: le signe # dans le script permet de placer des commentaires :
Ce n'est pas l'invite ! .N'enlevez pas la première ligne #!/bin/sh, cela
identifie le shell pour lequel le script est écrit.
Une fois sauvegarder il ne reste plus qu'a le rendre executable (permission executable et lisible) :
A l'aide de la commande chmod en tapant : # chmod 755 /sbin/cdon
Si vous préférez laisser ce script dans votre répertoire "d'essais" (droopy par exemple) :
Il suffit de se placer dans /droopy/ pour executer cdon ou de taper # /droopy/cdon
Ou si vous n'avez pas ajouté le point "." au PATH, tapez ./cdon (sous /droopy/).
Nous aurons l'occasion de reparler de chmod dans l'introduction aux droits d'accès.
Mais pour utiliser les commandes que vous connaissez maintenant, vous allez réaliser un script qui affichera le contenu de vos fichiers
de configuration après les avoir copier dans /droopy/config.perso ( pourquoi pas ?).
Ce script s'appellera 'ma.conf' :
#!/bin/sh
# /droopy/ma.conf affichage de mes fichiers de configuration
#
echo 'Recuperation des infos de fstab, inittab et ld.so.conf .'
# copie des fichiers dans config.perso
cat /etc/fstab /etc/inittab /etc/ld.so.conf >/droopy/config.perso
# affichage du nombre de lignes écrites dans config.perso
wc -l /droopy/config.perso
# affichage du contenu de config.perso
less /droopy/config.perso
#Et pourquoi pas l'imprimer ?
lpr config.perso
# Fin du script ma.conf
Et puis...
Même chose : # chmod 755 /droopy/ma.conf ou chmod u+rx /droopy/ma.conf , ces
commandes rendent ma.conf lisible et éxecutable.
Alors ! pour executer ce script en lançant la commande ma.conf : Vous avez plusieurs possibilités.
_Vous allez dans /droopy/ et vous tapez ma.conf ou ./ma.conf ?
_Vous restez où vous etes et vous tapez /droopy/ma.conf ?
_Vous ajoutez vôtre répertoire droopy au PATH ou/et le point "."?
.... Cela ne vous plait pas ?...! Il y a une autre solution ?... Créer un lien symbolique dans un répertoire de binaires.
Nous approfondirons les liens en même temps que les droits d'accès...!
Mais essayez cela :
# ln -sf /droopy/ma.conf /sbin/goconf
Allez voir dans /sbin/ ce qui c'est passé...?
Il vous suffit maintenant de tapez # goconf
Et cela même si vous n'avez pas le point "." et/ou le chemin "/droopy" dans le PATH.
Bien... pas de question..?
Les scripts les plus importants sont les scripts d'initialisation qui sont automatiquement exécutés par le shell au lancement du
système, pour configurer vôtre environnement ( nous allons y venir... bientôt.).
Suivant le shell et la distribution utilisés les scripts d'initialisation se trouveront dans /etc/, /etc/rc.d, /etc/rc* ou dans /etc/rc.d/init.d .
Il existe également des fichiers de configuration de votre environnement :
pour bash : /etc/profile
$HOME/.bash_profile
$HOME/.bashrc
pour tcsh : /etc/csh.login
$HOME/.tcshrc
$HOME/.login
Ne vous inquiètez pas si vous ne trouvez pas exactement ces fichiers cachés(le nom) dans vôtre répertoire personnel ($HOME) :
Les shells utiliseront par défaut : pour bash, ".profile" et pour tcsh, ".tcshrc".
|