------------------------------------------------------------------------------ *5*************************** Unix, le shell ********************************* ----------------------------------| 3D13 |------------------------------------ Il existe plusieurs shells sous Unix/Linux, choisissez le votre mais celui par defaut est bash (Bourne Again SHell) donc, je part du principe que vous etes sous celui-ci. Le shell a toutes les caracteristiques d'un langage moderne de programmation. Les commandes pourront etre regroupees sous forme de scripts et elle pouront faire appel a : - des variables - des operations (modification des contenus de variables) - des controles de structure (tests decisionnels et boucles) Pour ceux qui viennent du monde de M$-DOS, imaginez donc que cette rubrique aurait pu s'appeller "les fichiers batch sous MS-DOS", mais comme on est sous Unix et que il y a un shell que l'on programme comme un fichier batch, j'ai preferer l'appeller comme ca. Ne comparez pas les fichiers batch avec la programmation du shell sous unix, cela reviendrait a comparer le langage basic avec le c++. Il y a plusieurs types de variables acceptees : - Variables definies par l'utilisateur - Variables predefinies par le systeme - Variables speciales Pour ce qui est des sorties, utilisez la commande echo et pour les lectures, utilisez la commande read. Au sein de groupe des controles de structure, distinction est faite entre les decisions et les boucles. En ce qui concerne les decisions, il s'agit plus particulierement : - des decisions simples fondees sur if - des decisions multiples fondees sur case Les premieres lignes de tout script devraient mentionner le nom du programmeur ainsi que le role de ce script. Sinon, vous oublierez tres rapidement le but poursuivi au moment de la creation de ce script. exemple : [root@localhost /]# cat Exemple1 # Il est possible de placer des commentaires dans les scripts # Les lignes de commentaires commencent par le signe # # Tout ce qui suit le signe # sera ignore par le shell # Un signe # peut aussi etre place en milieu de ligne pwd # Ou sommes nous ? who # Qui est encore la ? ls # Que se passe t-il ? # Fin du script [root@localhost /]# Si vous voulez ecrire du texte a l'ecran, il faudra utiliser une commande de sortie, il s'agit de : echo Il est possible d'inserer des caracteres sspeciaux au sein de votre texte : |-------------------|-------------------------------------------------------| | Caractere special | Effet | |-------------------|-------------------------------------------------------| | \n | Saut de ligne | | \b | Retour arriere | | \t | Marque de tabulation | | \c | Fin de la sortie et annulation du saut de ligne | | \\ | Place le caractere \ au sein de votre texte | | \0n | Indication d'un nombre en base 8 sur une, deux ou | | | trois positions, pour sortie de caracteres speciaux | |-------------------|-------------------------------------------------------| Pour eviter que le shell n'interprete le backslash et permette a la commande echo de le traiter, vous placerez les parametres entre guillemets. La commande echo "Tomates|nCornichons" affiche le texte "Tomates" dans la premiere ligne et le texte "Cornichons" dans la ligne suivante. La sortie se termine par un saut de ligne et le prompt reaparrait sur la troisieme ligne. echo "Saisie:\c" cette commande affiche le texte "Saisie:". Le shell presente son prompt directement derriere le texte "Saisie:", car le saut de ligne a ete annule par le parametre \c. A l'aide de nombres de base 8, vous pourrez placer divers caracteres speciaux dans les parametres. Ainsi, dans la commande suivante, le texte et maintenant un bip sera affiche et suivi d'un bip sonore : echo "et maintenant un bip\007" La commande echo est egalement utilisee en collaboration avec des variables du shell. Le prochain paragraphe vous en apprendra plus sur le sujet. Les shell vous offre la possibilite de travailler avec des variables. Aussi, repecter la regle des identificateurs, enoncee dans mla troisieme partie dans l'apprentissage de turbo pascal. Souvenez vous, il existe trois types de variables : - Variables definies par l'utilisateur - Variables predefinies par le systeme - Variables speciales Les deux premiers types de variables sont tres facilement modifiables quant a leur contenu. Par contre, vous ne pourrez acceder au dernier type, les variables speciales qu'en lecture. * Les variables definies par l'utilisateur Relisez bien la regle des identificateurs pour le langage Turbo Pascal citee au-dessus. Pour declarer une variable, on lui affecte une valeur : a=Tomates Bien sur, la variable est a. Mais n'oubliez pas que lorsque vous ferez appel a celle-ci, repectez les minuscules/majuscules car a est different de A. Pour acceder au contenu des variables du shell, vous placerez devant le nom de la variables le signe $, par exemple : [root@localhost /]# $PATH et vous verrez la liste des repertoires incrits pour l'acces direct au path. exemples : [root@localhost /]# a=/u/hugo [root@localhost /]# cd / [root@localhost /]# pwd / [root@localhost /]# ls $a /u/hugo/Adresses /u/hugo/Legume /u/hugo/Legume2 /u/hugo/Mon_second /u/hugo/abraham /u/hugo/bebraham /u/hugo/jacques /u/hugo/mon_premier /u/hugo/zebraham [root@localhost /]# cd $a [root@localhost /]# pwd /u/hugo [root@localhost /]# echo La variable contient $a La variable contient /u/hugo [root@localhost /]# cd /tmp [root@localhost /]# cd $a/mon_premier [root@localhost /]# pwd /u/hugo/mon_premier [root@localhost /]# aussi, l'espace est prit comme un caractere special, voici 3 fois la meme chose sous des formes differentes : a="Voici de belles tomates" a='Voici de belles tomates' a=Voici\ de\ belles\ tomates Maintenant, supposons qu'il existe une variable contenant la chaine de caracteres "Tomates", on pourrait ecrire : [root@localhost /]# b="Ce sont des $a vertes" [root@localhost /]# echo $b Ce sont des Tomates vertes Pour les deux signes de verouillage " et ', il est a noter qu'ils se verouillent mutuellement. Dans un texte place entre des guillemets, vous pourrez utiliser librement les apostrophes et inversement : c="C'est ainsi" d='dit-il: "et le reste n'est que foutaise..."' Pour supprimmer un variable, utilisez la commande unset, par exemple, pour supprimmer toutes les variables precentes, tapez : [root@localhost /]# unset a [root@localhost /]# unset b [root@localhost /]# unset c [root@localhost /]# unset d Pour proteger vos variables en ecriture, utilisez la commande readonly [root@localhost /]# a="Vive le camembert!" [root@localhost /]# readonly a [root@localhost /]# unset a a: is read only maintenant, tapez, en ligne de commande ceci : [root@localhost /]# a="suite" [root@localhost /]# b="c'est tout " [root@localhost /]# c="aujourdh'ui, " [root@localhost /]# d="la prochaine" [root@localhost /]# e="pour " [root@localhost /]# f="a " [root@localhost /]# echo $b$e$c$f$d