INTRODUCTION AU LANGAGE PERL
Transcription
INTRODUCTION AU LANGAGE PERL
INTRODUCTION AU LANGAGE PERL I Presentation du langage PERL Ce document a pour but de vous fournir un outil simple et rapide à consulter lors de développements réalisés en langage PERL. Le support que j'ai utiliser pour produire ce document est le livre de Randall L.Schwartz "introduction à Perl" aux éditions O'Reilly ainsi que de quelques autres documents sur le sujet. IMPORTANT : Pour chaque élément du langage, j'ai crée un petit programme d'exemple afin de montrer et le coté théorique et le coté pratique ce qui manque souvent. Il y'a plus de 60 petits programmes commentés et testés. Ces programmes ne demande aucun droit particulier pour les executer et ne risque en aucun cas de détruire votre système :). P.E.R.L signifie Pratical Extraction and Report Language ce qui veut dire en français Extraction Pratique et Langage de Rapport. Ce langage n'est pas un langage compilé a proprement dit comme le langage C par exemple, mais ce n'est pas non plus un langage interpreté comme le shell mais plutot un melange des deux. En effet il analyse d'abord le programe en entier avant de l'executer mais ne produit aucun fichier objet comme le fait un interpreteur. Pour utiliser ce langage il suffit de disposer les instructions dans un fichier, rendre ce fichier executable et à l'appel de ce fichier, l'execution se fera comme avec un programe écrit en langage shell. Avant toutes choses deux éléments sont necessaires : -> le logiciel PERL -> indiquer dans votre fichier que votre programe est un programe PERL Si le deuxième point n'est pas satisfait, le programme sera executé comme s'il était écrit en langage shell. La directive indiquant que ce programme est un programme en langage PERL est la suivante : #!/perl On indique le répertoire dans lequel se trouve le binaire perl. Par exemple si le binaire se trouve dans /usr/local/bin la directive sera #!/usr/local/bin/perl Attention ne confondez pas la directive et les commentaires qui eux aussi commencent par le signe #. II Le langage J'ai choisi de le résumer de la manière suivante. Chaque partie importante aura un chapitre qui lui sera dédié (affichage des données, stockage, structures ...). II.1 Stockage des données Vous pouvez utiliser le même nom pour des types de variables différents ($nom, @nom, %nom). En effet ces éléments ont des espaces de stockage indépendants donc sont des éléments différents. D'un point de vue pratique, cela n'est pas recommandé car vous risquez de ne plus vous y retrouver. a) Les variables : notation : $variable exemple : $valeur = "bonjour"; b) Les tableaux ou les listes : notation : @liste ou $liste[indice] <=> @liste[indice] - Le premier indice est l'indice 0. - Les indices de tableau peuvent etre soit de type numérique soit de type caractère. $liste[23]="a"; ou $liste["aaa"]="b"; - Une liste peut etre un ensemble de données (1,2,3) ou un ensemble d'expressions ($a+$b,$c+$a) ou un mélange des deux. - La liste vide est notée : () - Afin de connaitre l'indice du dernier éléments stockés dans une liste : $#liste - Afin de connaitre le nombre d'éléments stockés dans une liste : $nb = @liste; ou $#liste + 1 Quelques exemples de manipulation d'une liste : @liste = ("a","b","c"); @liste[0] ou $liste[0] -> a $#liste -> 2 $nb = @liste; -> 3 (affectation scalaire) ($nb) = @liste -> le premier élément a (affectation de tableau) @liste=(@liste,"d"); -> a, b, c, d @liste[0..2] -> a, b, c @liste[0,1] = @liste[1,0]; -> b, a, c, d (inversion de 2 éléments) <=> ($liste[0],$liste[1]) = ($liste[1],$liste[0]); c) Les tableaux associatif : notation : %tableau Le tableau associatif permet d'associer 2 éléments et ainsi de faire une paire avec une clé et une valeur. (clé,valeur) Quelques exemples de manipulation d'un tableau associatif : %tableau = ("a","1","b","2"); $cle="a"; $tableau{$cle} -> 1 Affichage du tableau trié par ordre croissant : for $key (sort keys %tableau) { print "la clé $key correspond à la valeur $tableau{$key}\n";} Il y'a un tableau particulier qui peut etre interessant et qui contient les valeurs de votre environnement : %ENV $cle = "PATH"; %ENV{$cle}; -> retournera les chemins contenus dans la variable PATH d) Les valeurs numériques sont stockées en décimales flottantes en double précision. II.2 Les bases de données et les tableaux dbm Ce système est une bibliothèque qui fournit un utilitaire simple de gestion de base de données en stockant des paires (clé,valeur) sur disque. Une fois ouverte, toutes les manipulations seront repercutées dans les fichiers sur disque. Important : à la fin de chaque clé un caractère NULL est ajouté au moment du stockage. Il faut donc pour récupérer une valeur procéder de la manière suivante : $val = $tab{"cle\0"}; chop($val); #pour l'affichage a) Pour associer une base de données dbm à un tableau dbm : dbmopen(%tableau_associatif,"dbmfichier",$mode); Le premier paramêtre est un tableau associatif Le deuxième paramêtre est la base de données composée de deux fichiers dbmfichier.dir et dbmfichier.pag. Le troisième paramêtre est le mode d'accès en octal du fichier. Si le fichier existe déjà ce paramêtre n'est pas utile et peut etre remplacé par la valeur indéfinie undef. b) Pour stopper l'assocation entre le tableau et la base de données : dbmclose(%tableau_associatif); c) Pour accéder à des données ayant une taille fixe : Cette méthode permet d'atteindre les données (enregistrements) de manière plus rapide et plus direct en "sautant" autant d'octets que nécessaire. - L'ouverture : open(DESC,"mode"); Où mode est : +fic on crée le fichier fic puis on l'ouvre en Lec./Ecr. +>>fic on ouvre ou on crée (si fic n'existe pas) puis on ouvre en Lect./Ecr. - Le positionnement : seek(DESC,nb_octets_a_passer,position_de_départ); - L'écriture : print DESC données; Attention il est impératif que les données soient de la taille d'un enregistrement. Une fonction est pratique pour faire cela pack. print DESC pack("format",$champ1,$champ2, ...); Où format désigne le nombre d'octets de chaque champ. Exemple : A40AA20s A40 indique que le premier champ sera formaté sur 40 octets A indique que le deuxième champ sera formaté sur 1 octet A20 indique que le troisieme champ sera formaté sur 20 octets s indique que le quatrième champ sera formaté sur un entier court (2 octets) - L'écriture : read(DESC,$buffer,$nb_octets_a_lire); La valeur de retour est le nombre d'octets lus. Une fois l'enregistrement lu il faut récupérer chaque champ. Une fonction du même ordre que pack nous y aide : unpack. L'enregistrement est stocké dans la variable buffer. ($champ1,$champ2,...) = unpack("format",$buffer); (La partie format a été expliqué au dessus) II.3 Lecture des données stdin est l'entrée standard par défaut. Chaque élément lu conserve en dernier caractère le retour chariot (\n) d'où l'utilisation d'une commande supprimant le dernier caractère d'une variable : chop. a) Au clavier : $name = <stdin>; # le retour chariot termine la lecture @liste = <stdin>; # chaque ligne entrée est un élément du tableau. Il # est nécessaire de finir par <ctrl><d> En boucle (pour terminer la boucle <ctrl><d>) : while(<>) # <> est l'opérateur diamond { print "la valeur : $_\n"; } # $_ est la variable de stockage # par défaut si aucune n'est précisée <=> while($valeur = <stdin>) { print "la valeur : $valeur\n"; } b) Dans un fichier : Tout comme dans la majorité des langages, il est nécessaire d'ouvrir le fichier, de récupérer les données et de le refermer. open(DESC,"fichier"); # On ouvre le fichier while($valeur = <DESC>) # On lit les données par lignes { chop($valeur); # On supprime le retour chariot print "la valeur : $valeur\n"; # On affiche la valeur lue } close(DESC); # On ferme le fichier On pourrait comme précédemment pu utiliser la variable par défaut : open(DESC,"fichier"); # On ouvre le fichier while(<DESC>) # On lit les données par lignes { chop; # On supprime le retour chariot print "la valeur : $_\n"; # On affiche la valeur lue } close(DESC); # On ferme le fichier c) En ligne de commande lors du passage de paramêtres : Les arguments sont stockés dans un tableau prédéfini : @ARGV $ARGV[0] -> premier paramêtre Si il n'y a pas de paramêtre @ARGV renvoie '-' ou $#ARGV -1 if(@ARGV == '-') {print "Aucun parametre sur la ligne de commande\n";} <=> if($#ARGV == -1) {print "Aucun parametre sur la ligne de commande\n";} II.4 Ecriture des données stdout est la sortie standard par défaut. Le backslash (\) permet de désactiver la spécificité de certains caractères. a) Sortie simple - A l'écran : simple : print "Je suis sur votre écran\n"; print "la valeur est : $tab{\"cle\"}\n"; formaté : printf "%6s %3d %4.2f\n",$s,$d,$f; %6s sortie caractère sur 6 caractères %3d sortie d'un entier sur 3 caractères %4.2f sortie d'un réel sur 4 caractères dont 2 apres la virgule - Dans un fichier : DESC est le descripteur du fichier de sortie à ouvrir avant l'écriture grace à la commande open. n'oubliez pas de le fermer au moyen de la commande close. simple : print DESC "Je suis dans votre fichier\n"; formaté : printf DESC "%6s %3d %4.2f\n",$s,$d,$f; b) Sortie formatée en utilisant le mot clé format : Ce type de sorties permet d'avoir un affichage plus précis avec un format prédéfini (un peu comme avec un printf mais plus simple d'utilisation et plus puissant). Pour définir un format vous devez utiliser le mot clé format et le définir puis afficher vos résultats au moyen de la commande write. - Description d'un format : format nom_du_format = descriptif de la sortie . nom_du_format : 2 types de nom sont possibles, pour l'entête et pour le corps de l'affichage. (NOM_TOP et NOM) Attention : N'oubliez pas le caractère . (point) qui termine la définition d'un format. Ce point doit être en première colonne dans votre fichier sinon vous risquez d'avoir une erreur. descriptif de la sortie : Ce descriptif comprend 2 parties essentielles 1. le format d'affichage 2. les variables à afficher 1. le format d'affichage Cette partie permet de connaitre la façon dont vont etre affichées les données (l'endroit, la manière, la taille ...) La taille est définie par le nombre de signes présents apres le signe @ ou ^ @>>>> indiquera que la valeur sera affichée sur 4 caractères justifiés à droite @<<<< même chose mais justifié à gauche @|||| même chose mais centré @###.## champ numérique avec 2 chiffres apres la virgule @* champ multiligne, on ne s'occupe pas de la taille du champ à afficher ^>>> affichera un champ sur plusieurs lignes de 3 caractères lignes vides incluses ~ ^>>> même chose mais sans les lignes vides ~~ ^>>> même chose mais répétera l'affichage jusqu'à trouver une ligne vide 2. les variables à afficher $variables1,$variables2, .... - Affichage à l'écran : Le nom du format sera STDOUT qui par défaut est la sortie standard. STDOUT_TOP sera le nom du format pour l'entête. - Affichage dans un fichier : Le nom du format sera le nom du descripteur du fichier (par exemple DESC). DESC_TOP sera le nom du format pour l'entête. - Quelques exemples : * On désire écrire les noms et prènoms des personnes contenus dans un tableau associatif par colonnes avec comme entête les mots Nom Prènom et ceci à l'écran. format STDOUT_TOP = # Permet d'écrire la première ligne Nom Prénom # La première ligne . # Fin du format pour l'entête format STDOUT = # Permet d'écrire les données formatées @>>>>>>>> @>>>>>>>>>> # Format d'affichage des 2 champs justifié à droite $nom, %tab{$nom} # le nom sur 8 caractères et le prènom sur 10 . # Fin du format foreach $nom (keys %tab) { $prenom = @tab{$nom}; write; } # boucle permettant l'affichage du tableau Attention : Ne pas mettre de commentaires comme ici dans la définition d'un format ceux-ci seraient affichés lors de l'affichage. * On désire faire la même chose mais dans un fichier. Nous allons donc nommer le format du nom du descripteur du fichier. format DESC_TOP = ... # Sera l'entête lors de l'affichage dans le fichier # référencé par le descripteur DESC format DESC = ... # Sera le format d'affichage du corps # dans le fichier open(DESC,">fichier"); # On ouvre en écriture le fichier "fichier" # référencé par le descripteur DESC foreach $nom (keys %tab) # boucle permettant l'affichage du tableau { $prenom = @tab{$nom}; write DESC; # On affiche les résultats dans le fichier } close(DESC); # On ferme le fichier Des fichiers contenant des programmes sont fournis pour vous aider à mieux comprendre les formats. (format.ex formatfic.ex formatmul.ex) II.5 Autres mots clès # chop Ce mot clè permet de supprimer le dernier caractère contenu dans une variable. Il est notamment très utile pour supprimer le retour chariot lors de la lecture au clavier des données : Syntaxe : chop($variable); # if Syntaxe : if(expression) { VRAI; } else { FAUX; } { ou if(expression) VRAI; } elsif(expression2) { VRAI2; } .... else { FAUX; } La syntaxe abrégée peut etre utile mais est aussi moins facilement comprehensible : (expression)?VRAI;:FAUX; # Est équivalent au premier cas # unless Syntaxe : unless(expression) ou (expression)||FAUX;:VRAI; { FAUX; } else { VRAI; } # rename Permet de renommer un fichier sous un autre nom. Syntaxe : rename($fichier,"$autre_nom"); # time Renvoie l'heure système qui est le nombre de secondes écoulées depuis le 1er Janvier 1970 à minuit GMT. Pour obtenir un écart en heure entre deux heures : ($time1 - $time2)/3600 Syntaxe : time(); # keys Permet de récupérer dans un tableau associatif la clé ou les clés dans un ordre quelconque afin de trouver ensuite la donnée qui lui est associée. Keys renvoie vide si le tableau est vide. Syntaxe : keys(%tableau) dans une boucle : foreach $cle (keys %tableau) { $donnee = %tableau{$cle}; print "la donnee $donnee est associee a la cle $cle\n"; } # foreach Ce mot clé permet de réaliser une boucle en recupérant tous les élément d'une liste. Syntaxe : foreach $cle (@liste) { instruction; } Exemple : @liste = (1,2,3,4); foreach $element (@liste) { print "l'element est : $element\n"; } # sort Trie les éléments par ordre alphabétique. Syntaxe : @liste_trie=sort(@liste) # for Boucle permettant d'effectuer une action autant de fois que l'on désire. Syntaxe : for(valeur_initiale;test;incrementation) { commande; } Exemple : for($i=1;$i<=10;$i++) { print "Le numero est $i\n"; } # while Boucle permettant d'effectuer une action tant qu'une condition est vraie. Syntaxe : while(condition) { instruction; } # until Boucle permettant d'effectuer une action tant qu'une condition est fausse. Syntaxe : until(condition) { instruction; } # tr Comme en shell cette commande permet de transformer une chaine en une autre chaine ou de modifier des occurences dans une chaine. Syntaxe : Voir le man tr Exemple : $name =~ tr/A-Z/a-z/; # Transforme toutes les majuscules en minuscules $name =~ tr/er/ab/; # Transforme les e en a et les r en b # sprintf Permet de formater une sortie. Syntaxe : sprintf(format,variables); Exemple : $res = sprintf("Pour la sortie du film %s\n",$nom); # sleep Suspend le déroulement du programme durant le laps de temps indiqué. Syntaxe : sleep secondes; # length Renvoie le nombre de caractères de la chaine. Syntaxe : length(chaine); # split Découpe et range dans une liste les éléments trouvés contenus entre un délimiteur défini. Syntaxe : split(delimiteur,$variable); Exemple : $a = "1:2:3:4::5"; @liste = split(/:/,$a); -> ("1,"2","3","4","","5") # join Cancatene une valeur à chaque element d'une liste et range le tout dans une variable. Syntaxe : join($valeur,@liste); Exemple : $valeur = "+"; @liste = ("1","2","3","4"); $res = join($valeur,@liste); -> ("1+2+3+4+") # die Permet de terminer un programme au moment ou on passe sur le die et de faire une sortie écran au même moment. Syntaxe : die "c'est la fin\n"; # last Permet de sortir d'une boucle avant la fin normale de celle-ci comme break en C par exemple. Un label peut lui etre associe afin de continuer l'execution du programme à un endroit particulier. Syntaxe : last ou last LABEL; # next Permet de passer au traitement de l'élément suivant dans une boucle et d'abandonner le traitement de l'élément en cours. Un label peut lui etre associe afin de continuer l'execution du programme à un endroit particulier. Syntaxe : next ou next LABEL; # redo Permet de recommencer le traitement de l'élément en cours sans effectuer le traitement apres le redo. Un label peut lui etre associe afin de continuer l'execution du programme à un endroit particulier. Syntaxe : redo ou redo LABEL; # undef Définie la chaine vide. Avant toutes opérations, une chaine à cette valeur. # push Ajoute un élément ou plusieurs en fin de liste (à droite). Syntaxe : push(@liste,$elemt1,$elemt2,...) <=> @liste=(@liste,$elemt1,$elemt2,...) voir pop # pop Retire le dernier élément de la liste (à droite). La valeur de retour est l'élément supprimé. Syntaxe : pop(@liste) voir push # unshift Ajoute un élément ou plusieurs en début de liste (a gauche). Syntaxe : unshift(@liste,$elemt1,$elemt2,...) <=> @liste=($elemt1,$elemt2,.,@liste) Voir shift # shift Retire le premier élément de la liste (a gauche). La valeur de retour est l'élément supprimé. Syntaxe : shift(@liste) voir unshift # reverse Inverse le sens de la liste. Syntaxe : @liste_inversee=reverse(@liste) # values Renvoie les valeurs contenues dans un tableau associatif. Syntaxe : values(%tab); # each Renvoie chaque éléments du tableau associatif. Syntaxe : ($cle,$val)=each(%tab); # delete Détruit un couple de valeur dans un tableau associatif. Syntaxe : delete($tab{$cle}); # stat Renvoie 13 champs d'informations concernant un fichier. Syntaxe : ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime, $blksize,$blocks) = stat($fichier); # lstat Renvoie 13 champs d'informations concernant le lien symbolique et non sur le fichier pointé. ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime, $blksize,$blocks) = lstat($fichier); # chdir Permet un changement de répertoire. Renvoie vrai si le changement s'est bien passé. Syntaxe : chdir($chemin); # opendir Ouvre un descripteur de répertoire. Syntaxe : opendir(descripteur,$repertoire); voir closedir, readdir # closedir Ferme un descripteur de répertoire. Syntaxe : closedir(descripteur); voir opendir, readdir # readdir Liste le contenu du répertoire pointé par le descripteur ouvert par opendir. Syntaxe : readdir(descripteur); voir opendir, closedir # unlink Detruit un ou plusieurs fichiers. Syntaxe : unlink($fic1,fic2,...); Il est possible de detruire plusieurs fichiers en utilisant une expression : unlink(<*.o>); detruira tous les fichiers ayant une extension .o Le < et le > permettent d'inhiber le caractere special * # system Realise des appels système. Syntaxe : system("appel"); # link Crée un lien en dur entre deux fichiers (equivalent a ln) Syntaxe : link($fichierorigine,$fichierlien); # symlink Crée un lien symbolique entre deux fichiers (equivalent a ln -s) Syntaxe : symlink($fichierorigine,$fichierlien); # readlink Donne les renseignements sur le fichier lié par la commande symlink (équivalent à ls -l) Syntaxe : readlink($fichier); # mkdir Crée un repertoire. Syntaxe : mkdir($repertoire,$droit); # rmdir Detruit un répertoire Syntaxe : rmdir($repertoire); # chmod Permet de modifier les droits sur un ou plusieurs fichiers ou un ou plusieurs répertoires. La valeur de retour de la commande est le nombre de modifications effectuées. Syntaxe : chmod($droits,$fichier1,$fichier2, ...); $droit est en octal 0777 donnera tous les droits a tout le monde On peut modifier plusieurs fichiers en utilisant une expression : chmod(0777,<*.o>); changera les droits a tous les fichiers ayant l'extension .o # chown Permet de modifier le proprietaire d'un fichier ou d'un répertoire. Pour l'utiliser il vous faut avoir des droits particuliers la plupart du temps. La valeur de retour de la commande est le nombre de modifications effectuées. Syntaxe : chown($uid,$gid,$fichier1,$fichier2,..); $uid est le numéro d'identification de l'utilisateur $gid est le numéro d'identification du groupe # utime Permet de changer la date des fichiers ou répertoires au niveau de la date de dernière modification et de la date de dernier changement de l'inode. La valeur de retour de la commande est le nombre de modifications effectuées. Syntaxe : utime($date_modification,$date_inode,$fichier1,$fichier2,..); # index Renvoie l'emplacement d'une sous-chaine de caractères dans la chaine indiquée ou -1 si cette sous-chaine n'existe pas. Attention les indices commencent à l'indice 0. La chaine est parcourue par la gauche. Le paramêtre $position permet de faire un recherche à partir d'un indice precis. Syntaxe : index($chaine,$sous-chaine); ou index($chaine,$sous-chaine,$position); # rindex Renvoie l'emplacement d'une sous-chaine de caractères dans la chaine indiquée ou -1 si cette sous-chaine n'existe pas. Attention les indices commencent à l'indice 0. La chaine est parcourue par la droite. Le paramêtre $position permet de faire un recherche à partir d'un indice precis. Syntaxe : rindex($chaine,$sous-chaine); ou rindex($chaine,$sous-chaine,$position); # substr Permet d'extraire et de substituer une sous-chaine d'une chaine. Si la valeur de $depart est négative, la substitution se fera par la droite (fin de la chaine). Si la chaine résultat est à gauche, le résultat du substr sera stockée dans cette chaine. Si la chaine résultat est à droite, cette chaine devient la chaine de substitution et remplacera les éléments selectionnés. La longueur de cette chaine peut etre inferieure ou superieure à la longueur de substitution, la chaine résultat sera d'autant plus courte ou plus longue. Syntaxe : $subst = substr($chaine,$depart,$longueur); ou substr($chaine,$depart,$longueur)= $rempl; II.6 Les sous-programmes Les sous-programmes permettent de developper de manière modulaire dans le cas ou plusieurs personnes se partagent le travail par exemple. Mais aussi permettent de structurer et de clarifier le programme. Syntaxe : définition : sub sous_programme { local($param1); instructions ... } appel : &sous_programme($el1,$el2); Le partie "local" permet d'utiliser des variables locales qui en dehors du sous-programme ne seront pas vues. Les variables passees en argument (el1 et el2) sont stockées dans une liste qui est : @_ . La valeur de retour d'un sous-programme est la dernière évaluation. II.7 Manipulation de fichier Pour etre utiliser un fichier que se soit en lecture et\ou en ecriture doit etre associé à un descripteur de fichier. Les deux éléments importants sont open et close. Syntaxe : open(DESC,"fichier"); ... close(DESC); Les différents mode d'ouverture : en lecture : open(DESC,"fichier"); en ecriture : open(DESC,">fichier"); en ajout : open(DESC,">>fichier"); Ces manipulations de fichier peuvent etre utiliseés pour ouvrir et fermer une commande systeme qui sera alors associée à un descripteur de fichier. Exemple : open(MAIL,"|mail [email protected]"); print MAIL "Bonjour et a bientot\n"; close(MAIL); II.8 Les opérateurs a) Les nombres addition :+ soustraction : multiplication : * division :/ exponentiel : ** modulo :% b) Les nombres et les caractères Signification Nombre Caractére Egal « == » eq Différent « != » ne Inférieur «<» lt Supérieur «>» gt Inférieur ou égal «>» le Supérieur ou égal « >= » ge c) Les caracteres cancatenation : repetition : x evaluation : =~ \Ufred : FRED \ufred : Fred \LFRED : fred \lFRED : fRED d) Les fichiers L'utilisation peut etre faite de cette manière : if( operateur $fichier_repertoire) .... Operateur | Signification --------------------------------------------------------r | Le Fichier ou le Répertoire sont lisibles -w | F ou R modifiables -x | F ou R executables -o | F ou R proprietaire de l'utilisateur -R > -W > > Meme test que precedemment mais en fonction -X > de la presence ou non d'un setuid -O > -e | F ou R existent -z | F existe et sa taille est nulle -s | F ou R existent et sa taille est non nulle -f | C'est un Fichier -d | C'est un Repertoire -l | C'est lien symbolique -b | Fichier special de type bloc (Disque ..) -c | Fichier special de type caractere (E/S ..) -u | F ou R disposant d'un setuid -g | F ou R disposant d'un setgid -T | Fichier de type texte -B | Fichier de type binaire -M | Age de la dernière modification en jours -A | Age du dernier acces en jours -C | Age de la dernière modification de l'inode en jours -------------------------------------------------------II.9 Traitement sur les utilisateurs et les groupes Il est parfois utile notamment pour ce qui est de l'administration de serveur de pouvoir recuperer les informations sur les utilisateurs. Pour cela plusieurs commandes sont disponibles. a) Récupération des informations sur un utilisateur # getpwnam Renvoie les informations sur un utilisateur a partir de son nom. Les informations retournees sont les suivantes celles contenues dans le fichier /etc/passwd : ($name,$passwd,$uid,$gid,$quota,$comment,$gcos,$dir,$shell) Syntaxe : @info = getpwnam($nomuser); # getpwuid Renvoie les informations sur un utilisateur a partir de son numero d'indentification. Les informations retournees sont les suivantes (celles contenues dans le fichier /etc/passwd) : ($name,$passwd,$uid,$gid,$quota,$comment,$gcos,$dir,$shell) Syntaxe : @info = getpwuid($uid); # setpwent Initialise le parcours du fichier /etc/passwd. Syntaxe : setpwent Voir aussi getpwent et endpwent # getpwent Permet de lire l'entrée suivante dans le fichier /etc/passwd. Syntaxe : getpwent Voir aussi setpwent et endpwent # endpwent Ferme le parcours du fichier /etc/passwd. Syntaxe : endpwent Voir aussi setpwent et getpwent b) Récupération des informations sur un groupe # getgrnam Renvoie les informations sur un groupe a partir de son nom. Les informations retournees sont les suivantes (celles contenues dans le fichier /etc/group) : ($name,$passwd,$gid,$members) Syntaxe : @info = getgrnam($nomgroupe); # getgrgid Renvoie les informations sur un groupe a partir de son nom. Les informations retournees sont les suivantes (celles contenues dans le fichier /etc/group) : ($name,$passwd,$gid,$members) Syntaxe : @info = getgrgid($uid); # setgrent Initialise le parcours du fichier /etc/group. Syntaxe : setgrent Voir aussi getgrent et endgrent # getgrent Permet de lire l'entrée suivante dans le fichier /etc/group. Syntaxe : getgrent Voir aussi setgrent et endgrent # endgrent Ferme le parcours du fichier /etc/group. Syntaxe : endgrent Voir aussi setgrent et getgrent II.10 Les paramêtres par défaut de l'environnement Il est possible que les paramêtres définis par défaut ne vous conviennent pas. Vous voulez que l'entrée standard, le nombre de lignes par pages ... ne soient pas celles par défaut. Vous pouvez alors creer votre propre environnement grace à la commande select. La valeur de retour de select est l'ancien environemment. Vous pouvez le récuperer ainsi il vous suffira de refaire un select et vous reviendrez dans l'environement precedent. Vous devez utiliser la commande write pour l'affichage sinon n'oubliez pas de décrementer le nombre de lignes restant pour l'affichage. Attention si vous ne voulez pas utiliser la sortie ecran vous devrez faire comme avec un format en utilisant un descripteur. Syntaxe : select($param); Paramêtres | Signification ------------------------------------------------------------------$~ | Format de sortie ou label (voir format) $^ | Format d'entête $= | Nombre de lignes par pages $| Nombre de lignes restant pour l'affichage dans la page