Il existe plusieurs types de shells. Voici les principaux :
- Le Bourne Shell (sh), développé par Steve Bourne (AT&T) et sorti en 1977.
- Le C shell (notre cher csh), développé par Bill Joy (Université de Berkeley) et sorti en 1978.
- Le Tenex C shell (tcsh), développé par Ken Greer (Carnegie Mellon University) entre 1975 et 1981.
- Le Korn Shell (ksh), développé par David Korn (AT&T) et sorti en 1983.
- Le "Bourne Again SHell" (bash), développé par Brian Fox (Free Software Foundation) et sorti en 1989. Ce nom est un jeu de mots avec born again (résurrection).
Sous FreeBSD, on utilise généralement le csh, inspiré du langage C. D'autres UNIX font plutôt appel au ksh. Et du côté de Linux, vous rencontrerez le bash, le shell du projet GNU. Vous pouvez en découvrir beaucoup d'autres dans le dossier /usr/ports/shells/ : ch, cwish, dash, esh (inspiré du langage Lisp), fish, zsh, etc.
C'est le (t)
csh que je vais vous présenter ici. Et je m'en voudrais de déroger à la grande tradition du
"Bonjour !" En effet, quand on apprend un nouveau langage de programmation, on commence bien souvent par écrire un petit programme tout simple, qui affiche juste "Bonjour !"
C'est parti !
Ouvrez
emacs (ou un autre éditeur de texte) et créez un nouveau fichier
bonjour.csh. Vous connaissez déjà la commande pour afficher du texte :
echo. Votre script n'a donc besoin que d'une seule ligne :
Code : Bash
Inutile de numéroter les lignes.
Tout au long de cette
Partie 5, vous allez lire des scripts comme celui-ci. En haut, il est indiqué
Code : Bash. Attention : ces scripts ne sont PAS écrits en
bash. Ils sont en
csh (ou en
ksh pour ceux du dernier chapitre). Mais comme il n'existe pas encore de fenêtres
Code : csh ou
Code : ksh sur le Site du Zéro (bientôt, peut-être), j'ai dû faire comme ça. J'espère que ça ne vous embrouillera pas.
Sauvegardez, ouvrez une console, et allez dans le dossier où se trouve votre fichier
bonjour.csh. Pour demander l'exécution du script, tapez
csh, puis le nom du fichier :
Code : Console | % csh bonjour.csh
Bonjour ! |
Ha ha, ça marche...
Vous pouvez aussi exécuter le script directement. Il se trouve dans le dossier
. (le dossier courant). Il faut donc taper :
Code : Console
Permission denied.
Comment ? Nous n'avons pas le droit d'exécuter le script ? Vérifions ça. Nous avons déjà parlé des
droits, quand je vous ai présenté la commande
ls -l. Rafraichissons-nous la mémoire en appelant à nouveau cette commande :
Code : Console
Vous obtenez alors la liste des fichiers du dossier courant, avec des informations pour chacun. Par exemple :
Code : Console | -rw-r--r-- 1 brice brice 71 May 14 13:56 bonjour.csh
-rw-r--r-- 1 brice brice 13814 May 30 18:22 dauphin.png
-rw-r--r-- 1 brice brice 3905131 May 14 22:26 debugging.mp4
-rw-r--r-- 1 brice brice 62778916 Apr 27 16:39 diablo-caffe-freebsd7-amd64-1.6.0_07-b02.tar.bz2
-rw-r--r-- 1 brice brice 1516 May 11 11:24 electrocardiogramme.png
-rw-r--r-- 1 brice brice 4556 May 15 15:13 exemple1.png
-rw-r--r-- 1 root brice 1049780 Apr 25 21:51 feh.png
-rw-r--r-- 1 brice brice 29216340 May 14 14:44 gcc-4.7-20110507.tar.xz
-rw------- 1 brice brice 67100672 May 21 17:15 gcompris.core
-rw-r--r-- 1 brice brice 70 May 14 14:41 fullo.f
-rw-r--r-- 1 brice brice 14482 May 9 19:11 liste des commandes freebsd.odt
-rw------- 1 brice brice 73310208 May 21 22:21 lxpanel.core
-rw-r--r-- 1 brice brice 10975 Jun 7 12:14 notes 2nd1.ods
-rw-r--r-- 1 brice brice 11658 Jun 7 12:14 notes 2nd2.ods |
S'il y a beaucoup de fichiers dans le dossier, cela peut être compliqué de s'y retrouver. Là, nous avons de la chance car
bonjour.csh est le premier fichier de la liste. Mais ce ne sera pas toujours comme ça. Pour ne voir que le fichier qui nous intéresse, on indique son nom :
Code : Console | % ls -l bonjour.csh
-rw-r--r-- 1 brice brice 71 May 14 13:56 bonjour.csh |
Citation : Chapitre ''Premier coup d'oeil'' Les caractères à gauche indiquent qui a le droit de faire quoi dans chaque fichier ou dossier. Les caractères 2, 3 et 4 indiquent les droits de lecture, d'écriture et d'exécution du propriétaire. Les 3 caractères suivants montrent les droits du groupe propriétaire et les trois derniers les droits des autres utilisateurs.
- r : droit de lire le fichier
- w : droit de modifier le fichier
- x : droit d'exécuter le fichier
Dans le cas de
bonjour.csh, son propriétaire (vous) a le droit de le lire et de le modifier mais pas celui de l'exécuter. Voilà pourquoi vous avez reçu le message
Permission denied quand vous avez demandé son exécution. Les autres membres de votre groupe (à priori, personne : il n'y a que vous dans ce groupe) n'ont que le droit de lire le fichier, tout comme le reste des utilisateurs.
Pour pouvoir exécuter directement le script, il faut donc modifier ses droits d'accès. C'est le travail de la commande
chmod. Pour chaque type d'utilisateur (propriétaire/groupe/autres) il faut indiquer le mode que vous voulez donner au fichier. C'est un nombre compris entre 0 et 7 :
- 0 : Aucun droit d'accès.
- 1 : Droit d'exécution.
- 2 : Droit de modification.
- 3 (1+2) : Droit d'exécution et de modification.
- 4 : Droit de lecture.
- 5 (1+4) : Droit d'exécution et de lecture.
- 6 (2+4) : Droit de modification de lecture.
- 7 (1+2+4) : Droit d'exécution, de modification et de lecture.
Imaginons que nous voulions donner tous les droits au propriétaire (mode n°7), les droits d'exécution et de lecture aux autres membres du groupe (mode n°5) et uniquement les droits d'exécution au reste du monde (mode n°1). Il faut donc écrire :
Code : Console
Vérifions qu'il n'y a pas d'erreur :
Code : Console | % ls -l bonjour.csh
-rwxr-x--x 1 brice brice 71 May 14 13:56 bonjour.csh |
C'est bien ce qu'on voulait.
Maintenant, vous avez le droit d'exécuter votre script :
Code : Console | % ./bonjour.csh
Bonjour ! |
On peut encore simplifier cette commande. Avez-vous suivi mes conseils et ajouté le dossier
. dans la variable d'environnement PATH ? Si ce n'est pas le cas, il est encore temps de le faire :
Code : Console
Ajoutez cette même ligne au fichier /etc/csh.cshrc ou, au moins, à votre .cshrc personnel pour enregistrer ce changement de manière permanente.
Le dossier courant fait maintenant partie de ceux que FreeBSD explore automatiquement quand vous tapez une commande. Donc vous n'avez qu'à écrire :
Code : Console
Difficile de faire plus simple, n'est-ce pas ? Et pourtant, on peut encore... En effet, le suffixe
.csh dans le nom du fichier n'a rien d'indispensable. C'est une convention pour reconnaître facilement un script csh. Mais si vous comptez l'utiliser souvent, il est plus utile de faire court.
Code : Console | % cp bonjour.csh bonjour
% rm bonjour.csh |
Votre fichier de script s'appelle maintenant
bonjour. Et pour l'exécuter, vous n'avez plus qu'à taper :
Code : Console