jeudi 22 mai 2014

La réalisation de deux scripts shell l’un est similaire à la commande GREP et un autre pour l’ajout d’un utilisateur ADDUSER

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 ?

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. 

II- Script cherche(grep) :

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

III- Script tpass3(adduser) :

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.


Categories: ,