Scripts Shell

Les scripts shell

Exécuter une suite de commandes stockées dans un fichier.
Première publication : .
Mise en ligne: 6 juin 2003.
Modifié le : 15 février 2005.
Par Frédéric Guerrier
Les scripts shell, Terminal, , Mac OS X, , Shell, , Script, , Commande

Il est possible d’aller plus loin que les simples alias de commandes et de lancer une suite de commandes réunies dans un fichier unique, ce fichier se nomme alors un script shell.

Qu’est-ce que c’est un shell ?

Le shell est un programme que tout utilisateur de Unix utilise pour dialoguer avec le coeur du système, le noyau. Au lancement de l’application Terminal, celle-ci ouvre un shell, c’est une fenêtre de Terminal dans laquelle se lance un programme capable d’interprêter des lignes de commande, et de les exécuter.

Il existe plusieurs de ces programmes, plus ou moins évolués selon les versions. Les interpréteurs de commande les plus courants sont le "Bourne SHell" (bsh), le "C SHell" (csh), le "Korn SHell" (ksh), le "Z SHell" (zsh), le "Bourne Again SHell" (bash) ou encore le "POSIX SHell" (sh).

Pour savoir quel shell vous utilisez, vous pouvez taper :


[PB:~] gunjinpb% echo $SHELL
/bin/tcsh

Sur Mac OS X, le shell par défaut est tcsh. C’est une version compatible mais étendue du shell C de l’Unix de Berkeley, Mac OS X repose sur des bases BSD, il est donc normal de disposer de ce shell dans l’Unix d’Apple. Il se caractérise par sa rapidité d’exécution.

A quoi sert d’écrire des scripts ?

La technique des alias est bien pratique pour lancer des commandes complexes grâce à un simple mot clé, une commande simplifiée en quelque sorte, mais celle-ci montre vite ses limites en cas de ligne trop grande ou d’une séquence de commandes shell...

Vous pouvez alors les mettre dans un script. Un script est tout simplement un fichier texte déstiné à être interprété, il a aussi l’avantage d’être exécuté sur n’importe quelle machine Unix sans modification. Il n’a pas besoin d’être compilé ! Le seul outil nécessaire se trouve (en principe) sur toutes les machines Unix, dont Mac OS X fait partie : le shell.


Utilisation de variables...

Une variable est une boite vide dans laquelle on peut stocker toute sorte d’informations. Ces informations peuvent changer, d’ou le terme variable.

Une variable est identifiée par un mot, c’est le nom de cette variable. Ce nom peut comporter des lettres (majuscules ou minuscules), des chiffres, ainsi que le caractère _, mais ne peut commencer par un chiffre.Il existe des variables qui ne respectent pas cette convention de nommage, mais il s’agit alors de variables spéciales créées par le shell lui-même.

Vous pouvez créer des variables dans un script, mais elles existerons seulement dans ce script .

-  Pour placer une information dans une variable avec tcsh on utilise la commande set.
-  Pour lire le contenu d’ une variable, vous devez lui prefixer $, et l’afficher grâce à la commande echo :


% set message = "coucou le monde"
% echo $message
coucoule monde

Certains shells poussent très loin la substitution, il est ainsi possible de avec tcsh de placer une commande dans une variable :


% set liste = "ls"
% $liste
Desktop  Documents  Library  Movies  Music  Pictures  Public  Sites  bin

On peut remarquer ici que pour exécuter la commande ls, nul besoin d’utiliser echo, car nous désirons exécuter cette commande, pas afficher son nom.

La liste des fichiers du répertoire dans le quel nous nous trouvons va s’afficher grâce à la commande ls. Il devient vite évident que le shell est aussi un environnement de programmation. Nous pouvons utiliser les variables pour personnaliser la sortie de nos scripts dans un premier temps, le but de cet article étant une initiation et pas un cours sur la programmation, restons simple :).

Ecrire un script de shell

Pour commencer, nous allons donc écrire un petit script, pour se faire on utilise un traitement de texte, soit TextEdit en mode texte dans l’interface Aqua par exemple (mais oui c possible :) ), soit pico directement dans un shell.

Nous choisissons pico, au lancement du shell nous sommes par défaut dans notre dossier de départ, allons sur le bureau avec cd :


Last login: Thu Jun  5 22:08:12 on console
Welcome to Darwin!
[PB:~] gunjinpb% cd Desktop/
[PB:~/Desktop] gunjinpb%

Les scripts de shell s’écrivent généralement avec un suffixe .sh, bien que sous Mac OS X, il soit possible de les suffixer avec .command, ce qui permet de les lancer avec un simple double-clic.

Nous allons donc créer, pour cet exemple, un fichier ex1.sh (le fait d’ouvrir un fichier qui n’existe pas va simplement le créer)...


[PB:~/Desktop] gunjinpb% pico ex1.sh

Un script est interprété par le shell ligne par ligne jusqu’a la fin de celui-ci ou la rencontre de la commande exit. En cas d’erreur, l’execution est arrêtée avec un message d’erreur.

Le shell qui execute le script est celui qui apparait dans la premiere ligne du script (si elle commence par # !), sinon, par défaut, c’est le shell courant qui l’executera, en revanche si celui-ci doit être interprété par un autre programme, il est absolument nécessaire de spécifier cette ligne (dans le cas, par exemple, d’un script en Perl ou il conviendra d’indiquer # !/usr/bin/perl). Nous allons indiquer cette information :


#! /bin/tcsh
# ici on peut ecrire des commentaires...

Toute ligne qui commence par le caractere # introduit en général un commentaire que le shell ignorera, il est fortement recommandé de commenter ses scripts. Un cas spécial est ici # ! en début de la première ligne du script.

Pour cet exemple nous allons donc afficher un petit message et lister le dossier courant, récapitulons le contenu de notre fichier :


#! /bin/tcsh
# ici on peut ecrire des commentaires...

# Les variables

set trait = "_________"
set message1 = "J'aime faire des scripts de shell :)"
set message2 = "Voici la liste du repertoire courrant :"
set liste = "ls"

# Debut du script

echo $trait
echo $message1
echo $trait
echo $message2
$liste
echo $trait

# Fin du script

Dans pico faites control+x, pressez y, puis entrée pour sauver votre oeuvre :)


Lancer des scripts depuis le Terminal

Pour pouvoir lancer ce sript, il doit être exécutable, vérifions ceci avec la commande ls, et ses options -F et -l :


[PB:~/Desktop] gunjinpb% ls -Fl
total 24
-rw-r--r--   1 gunjinpb  staff    95 Jun  5 22:10 ex1.sh

Nous pouvons remarquer qu’il ne l’est pas, modifions le grâce à la commande chmod :


[PB:~/Desktop] gunjinpb% chmod a+x ex1.sh
[PB:~/Desktop] gunjinpb% ls -Fl
total 24
-rwxr-xr-x   1 gunjinpb  staff    95 Jun  5 22:10 ex1.sh*
[PB:~/Desktop] gunjinpb%

Pour lancer notre test.sh, Vous pouvez soit rentrer le chemin absolu :


[PB:~/Desktop] gunjinpb% /Users/gunjinpb/Desktop/ex1.sh
_________
J'aime faire des scripts de shell :)
_________
Voici la liste du repertoire courrant :
ex1.sh
_________
[PB:~/Desktop] gunjinpb%

(Astuce : vous pouvez soit taper ce chemin à la main, soit glisser votre fichier sur le shell et celui-ci va remplir le chemin tout seul, pratique).

Soit le chemin relatif, si vous êtes dans le même répertoire que le script vous pouvez l’exécuter en tapant :


[PB:~/Desktop] gunjinpb% ./ex1.sh
_________
J'aime faire des scripts de shell :)
_________
Voici la liste du repertoire courrant :
ex1.sh
_________
[PB:~/Desktop] gunjinpb%

Je vous rappel que le point (.) désigne le répertoire courant, deux point (..) celui au dessus.

Il va bien falloir stocker les scripts quelque part, une bonne méthode de travail est de les ranger dans un répertoire spécialisé, je vous propose de créer un dossier dans votre répertoire de départ. il est d’usage de le nommer bin.

Placez votre premier script et les suivants dans ce dossier, ensuite grâce à des alias dans le fichier de configuration de votre Terminal, on pourra les lancer facilement, rajoutez par exemple cette commande dans votre fichier .tcshrc :


alias exemple1 "~/bin/ex1.sh"

Une autre méthode consisterai à inclure notre dossier $HOME/bin dans notre variable $PATH, qui stocke justement tous les répertoires où se trouvent les exécutables Unix de Mac OS X, en tapant ceci :


[PB:~/Desktop] gunjinpb% setenv PATH ${PATH}:${HOME}/bin
[PB:~/Desktop] gunjinpb% rehash

Il n’est toutefois pas conseillé de ’bidouiller’ cette variable d’environnement, si vous n’êtes pas sûr de ce que vous faites, préférez la méthode des alias.

Le coté pratique de ce procédé étant à la longue, de réunir dans un même endroit tous un tas de scripts en tous genres, que l’on lance depuis le Terminal, en lieu et place d’une foultitude de petites applications avec interface graphique qui sont plus longues à exécuter.

Conclusion

Nous avons appris ce qu’est un shell et comment on peut réaliser des scripts, les stocker, et les exécuter sur son Mac OS X. Dans les semaines qui viennent, nous analyserons des exemples de scripts pour automatiser certaines tâches répétitives, effectuer des sauvegardes, nous donnez des informations sur les services réseau du système, etc ...

Bon usage :)

Envoyer
L'e-mail du destinataire :

Votre Nom :

Votre e-mail :


 |  Imprimer |  Réagir
J`ai besion de un script pleaseee
Par MO le 3 février 2006 - Menu du forum
 

Bonjour, je besoin de un simple script qui arrete ou part le service de courrier sur un Mac Os X Server, ce plus pour utilise Tri Backup 4 , et executer le script avant de que le back up commence pour arreter le service et apres un autre script pour restart le service.

merci si quelqun peu m aide !

 
SCRIPT START STOP IMAP
 
> Les scripts shell
Par Patrick CHAUVIGNÉ le 13 octobre 2003 - Menu du forum
 
Suite à votre article sur les scripts shell, vous évoquiez dans la conclusion, l’automatisation de certaines tâches (notamment la sauvegarde). C’était le 6 juin dernier : ce projet est-il encore à l’étude et si oui, sous combien de temps ? Ce système me serait fort utile après les problèmes que je viens de rencontrer...
 
> Les scripts shell
Par enaira le 29 octobre 2003 - Menu du forum
 

Bonjour, Avec un ami on a fait un script qui depuis un serveur (ou n’importe quel ordinateur) UNIX sauvegarde un répertoire d’un autre ordinateur (windows ou unix) se trouvant sur le réseau. vous trouverez ce script sur le site www.russo79.com , rubrique "projects" -> smbackup

meilleures salutations

 
> Les scripts shell
 le 7 juin 2003 - Menu du forum
 
Pour exécuter des scriptes shell avec les permissions root, j’ai trouvé l’astuce ci dessous ( voir lien ), mais pour l’instant celà ne fonctionne pas avec mon Jaguar. Une idée ?
 
SUID shell script
 
> Les scripts shell
 le 10 juin 2003 - Menu du forum
 
Si tu souhaites exécuter ce script avec des permissions root, précède chacune de tes lignes de la commande sudo ou bien changes le propriétaire du fichier à l’aide de la commande chown. A priori je ne vois pas le problème que tu te poses...
 
> je demande de l’aide aux programmeurs de s scripts-shell
Par teddy le 2 juillet 2003 - Menu du forum
 

je vien de terminer mon module sur linux et voila que mon professeur me demande de faire un script shell sur la "Gestion des comptes" j’avoue qu’il nous a montré pleins de choses en shell mais je n’y comprend encors rien car tout est tres nouveau pour moi vous me comprenez ? pouvez-vous m’aider à les réaliser ?

exercice n°1 : Creer un script shell nommé "creation" permettant de creer un compte et d’afficher ce compte à un groupe selon le dialogue suivant : Prenom : , nom : , Login : , Groupe : , NB : le script doit vérifier si le compte et le groupe existent.

exercice n°2 : creer un script shell nommé "suppression" qui permet de supprimer un compte avec le dialogue suivant : login : , confirmation de suppressionde compte(O/N) NB : toujours verifier si le compte existe.

Je compte énormement sur vous pour m’aider à réaliser ces deux scripts shell.

Mon mail : teddy_ob@hotmail.com

 
> je demande de l’aide aux programmeurs de s scripts-shell
Par Bazaar le 8 juillet 2003 - Menu du forum
 

Je serais bien incapable de faire les scripts dont tu parles, mais tu trouveras certainement des infos intéressantes au bout du lien suivant .

http://www.ussg.iu.edu/edcert/session1/users/create.html

C’est en anglais

 
des explications en anglais
 
> je demande de l’aide aux programmeurs de scripts-shell de bournes
Par sofia le 18 février 2006 - Menu du forum
 
on vient de finir le cours de linux, et je n’ai pas encore maitrisé la matiere comme il faut, le prof nous a donné un script qui n’est pas trés difficile mais je n’arrive pas à le faire correctement, l’exercice consiste à inverser une phrase qui est entré au clavier, par exemple : bonjour tout le monde devient monde le tout bonjour. s’il vous plait aidez moi car je n’arrive vreiment pas à l’executer correctement. adresse : aznek.girl@caramail.com
 
> je demande de l’aide aux programmeurs de scripts-shell de bournes
Par sofia le 18 février 2006 - Menu du forum
 
on vient de finir le cours de linux, et je n’ai pas encore maitrisé la matiere comme il faut, le prof nous a donné un script qui n’est pas trés difficile mais je n’arrive pas à le faire correctement, l’exercice consiste à inverser une phrase qui est entré au clavier, par exemple : bonjour tout le monde devient monde le tout bonjour. s’il vous plait aidez moi car je n’arrive vreiment pas à l’executer correctement. adresse : aznek.girl@caramail.com
 
Copyright 2002-2017 xrings - Tous droits réservés - Mentions légales - Propulsé par SPIP - Webdesigner et référencement Frédéric Guerrier