Depuis l’apparition
d’Unix des milliers de développeurs n’ont
cessés d’améliorer le noyau .Dans nos jours, il reste le système
d’exploitation le plus robuste et le plus fiable .Ainsi, le but de ce tutoriel est la réalisation de
deux scripts shell l’un est similaire à la commande GREP et un autre pour l’ajout d’un utilisateur ADDUSER.
I-Introduction au Shell :
Le shell
est un interpréteur de commandes. Plus qu'une simple couche isolante entre le
noyau du système d'exploitation et l'utilisateur, il est aussi un langage de
programmation puissant. Un programme shell, appelé un script,
est un outil facile à utiliser pour construire des applications en
« regroupant » des appels systèmes, outils, utilitaires et binaires
compilés. Virtuellement, le répertoire entier des commandes UNIX, des
utilitaires et des outils est disponible à partir d'un script shell. Si ce
n'était pas suffisant, les commandes shell internes, telles que les
constructions de tests et de boucles, donnent une puissance et une flexibilité
supplémentaires aux scripts. Les scripts shell conviennent particulièrement
bien pour les tâches d'administration du système et pour d'autres routines
répétitives ne réclamant pas les particularités d'un langage de programmation
structuré complet.
Un Shell
a à peu près la même fonction vis-à-vis d'un système Unix. Il vous permet de
naviguer dans le système, exécuter des commandes sans avoir à vous soucier de
la façon dont réagit le système. C'est essentiellement un interpréteur de
commande mais il permet aussi de gérer des processus, un ensemble de variables qui
permettent de paramétrer votre environnement et de programmer des tâches
relativement complexes (fichier contenant un ensemble de commande Unix). Suivant le système sur lequel vous travaillez,
un ou plusieurs shells sont disponibles ; ils n'ont pas exactement les
mêmes fonctions ni la même syntaxe. La figure ci-dessous vous permettra de
mieux comprendre les différentes évolutions des shells Unix.
Qu'est-ce
que c'est un script ?
A quoi
sert d'écrire des scripts ?
Quelle shell est recommandé pour écrire des scripts ?
Les pas
nécessaires pour exécuter les scripts
Exécution des scripts
Atouts et inconvénients des shells
Dans ce script nommé « cherche » on a prévu trois
options :
-
Option
(-aide) : qui affiche une aide d’utilisation de la commande
-
Option (-n) :
qui affiche le nombre de fois le mot à rechercher a été trouvé pour chaque
fichier
-
Option
standard : qui affiche le numéro et le contenu de la ligne dont le mot à
rechercher a été trouvé.
Méthode :
On prend le
ou les fichiers sur les quels on voudrait faire la recherche.
-
On ouvre le ficher et on récupère
la première ligne qu’on met dans une
variable
-
On remplace le mot
« x » a rechercher par « xcar » de cette ligne.
-
Le résultat est mis dans
une autre variable.
-
Enfin on compare les deux
variables entre elles s’elles sont identiques alors le mot n’existe pas dans
cette ligne sinon il existe.
-
Séquentiellement le
traitement se fait pour toutes les lignes du fichier ainsi que pour tous les
fichiers de recherche.
Toute exception est gérée par des sorties d’erreurs
avec un retour de la fonction adéquate dans les différents cas afin d’intégrer notre
script au sein d’un autre .
Exemple :
if [
‘cherche mot fichier1’ ] then
echo j ai trouvé
else echo j ai pas trouvé
fi
Le script nommé tpass3 est
fait de tel manière à simplifier l’usage de la commande adduser qui comporte
plusieurs options, chose qui demeure un casse tête pour tout administrateur
Unix parce qu’il ne peut pas apprendre toutes les options d’un millier de
commandes Unix.Ce script ne comporte pas d’options mais il est interactif, ça
veut dire qu’à fur et à mesure le script demande des informations relatives au
compte à créer.
Méthode :
Une fois la commande tpass3
est tapée :
-
Lecture
du nom du compte : le script cherche dans le fichier si ce compte existe déjà
sinon.
-
Lecture
du mot de passe avec confirmation, si ces deux mots de passe sont identiques
alors il est crypté pour être introduit ultérieurement dans le fichier shadow.
-
Le
script cherche dans le fichier passwd un nombre supérieur à 500 ( FEDORA) et inférieur
à 3000 pour raison d’administration et qui n’est pas pris par un autre compte.
-
Le
script demande à l’administrateur s’il veut créer un simple utilisateur ou un
utilisateur propriétaire d’un groupe.
*1 cas (utilisateur propriétaire de groupe) :
- Lecture du nom du dossier personnel et
sa création au sein de /home.
- Ecriture
de la ligne « $login:x:$nu:$nu:$login,,,:/home/$doss:/bin/bash » dans
le
fichier /etc/passwd.
-
Ecriture de la ligne « $login:x:$nu: » dans le fichier /etc/group.
-
Ecriture de la ligne « $login:$pass:14202:0:99999:7::: » dans le fichier
/etc/shadow.
- Changement du propriétaire du
dossier utilisateur.
*2 cas
(utilisateur simple) :
- Lecture du nom du dossier personnel
et sa création au sein de /home.
- Le
script cherche dans le fichier /etc/group tout les groupes dont le numéro
est
supérieur
à 500 et les affiche.
-
Saisie du numéro du groupe dont le quel le compte qui sera créer ferra parti.
-
Ecriture de la ligne « $login:x:$nu:$nu:$login,,,:/home/$doss:/bin/bash »
dans le
fichier /etc/passwd.
- Ecriture de la ligne « $login:$pass:14202:0:99999:7::: » dans le fichier
/etc/shadow.
- Changement du propriétaire du
dossier utilisateur.
Ce déroulement n’est qu’une simplification de
la méthode adoptée dans le script qui gère toutes les erreurs successibles de
se produire.
Qu'est-ce
que c'est un script ?
Un script est un
programme qui peut être exécuté par le shell lui-même, qui contient des
commandes shell.
A quoi
sert d'écrire des scripts ?
Si vous utilisez plusieurs
fois une séquence de commandes shell, vous pouvez les mettre dans un script. Un
script 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 (généralement) sur toutes les machines Unix: le shell !
Quelle shell est recommandé pour écrire des scripts ?
Il est recommandable
d'utiliser toujours sh
(Bourne shell), car ce shell se trouve sûrement sur toutes les machines. S'il
faut utiliser des facilités que sh ne
fournit pas, vous pouvez utiliser bash, qui
est le shell par defaut de GNU/Linux
(et qui peut aussi exécuter tous les scripts sh). Pour utiliser un shell spécifique.
Shells compatibles a sh : bash, ksh
Shells incompatibles a sh : csh, tcsh
Les pas
nécessaires pour exécuter les scripts
1.
Vous écrivez le script dans un éditeur de textes (n'oubliez pas de
spécifier le shell sur la première ligne)
2.
(optionnel) Vous mettez le script dans un répertoire qui se trouve dans
$PATH
3.
Vous changez le type du fichier en le rendant exécutable : chmod a+x script
4. Vous pouvez l'exécuter en tapant
: script (ou le path s'il ne se trouve pas dans $PATH)
Exécution des scripts
Un script est interprété par
le shell ligne par ligne jusqu'à la fin du script ou à la rencontre de la
commande exit. En cas d'erreur, l'exécution est arrêtée avec un message
d'erreur. Le shell qui exécute le script est le shell qui apparaît dans la
première ligne du script (si elle commence par #!), sinon c'est votre shell courant qui l'exécutera.
Atouts et inconvénients des shells
L’étude d’un shell tel que bash
en tant que langage de programmation possède plusieurs avantages :
l c’est un langage
interprété : les erreurs peuvent être facilement localisées et
traitées ; d’autre part, des modifications de fonctionnalités sont
facilement apportées à l’application sans qu’il soit nécessaire de recompiler
et faire l’édition de liens de l’ensemble
l le shell manipule essentiellement
des chaînes de caractères: on ne peut donc construire des structures de données
complexes à l’aide de pointeurs, ces derniers n’existant pas en shell. Ceci a
pour avantage d’éviter des erreurs de typage et de pointeurs mal gérés. Le
développeur raisonne de manière uniforme en termes de chaînes de caractères
l le langage est adapté au
prototypage rapide d’applications : les tubes, les substitutions de commandes
et de variables favorisent la construction d’une application par assemblage de
commandes préexistantes dans l’environnement Unix
l c’est un langage
« glu » : il permet de connecter des composants écrits dans des
langages différents. Ces derniers doivent uniquement respecter quelques règles
particulièrement simples. Le composant doit être capable :
m
de lire sur l’entrée standard,
m
d’accepter des arguments et options éventuels,
m
d’écrire ses résultats sur la sortie standard,
m
d’écrire les messages d’erreur sur la sortie standard dédiée aux
messages d’erreur.
Cependant, bash
et les autres shells en général ne possèdent pas que des avantages :
l issus d’Unix, système
d’exploitation écrit à l’origine par des développeurs pour des développeurs,
les shells utilisent une syntaxe « ésotérique » d’accès difficile
pour le débutant
l l’oubli ou l’ajout d’un caractère
espace provoque facilement une erreur de syntaxe
l bash possède plusieurs syntaxes pour implanter la même
fonctionnalité, comme la substitution de commande ou l’écriture d’une chaîne à
l’écran. Cela est principalement dû à la volonté de fournir une compatibilité
ascendante avec le Bourne shell, shell historique des systèmes Unix
l certains caractères spéciaux,
comme les parenthèses, ont des significations différentes suivant le
contexte ; en effet, les parenthèses peuvent introduire une liste de
commandes, une définition de fonction ou bien imposer un ordre d’évaluation
d’une expression arithmétique.