IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation et administration système Perl Discussion :

Insertion d'une variable Perl dans une commande SHELL


Sujet :

Programmation et administration système Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Par défaut Insertion d'une variable Perl dans une commande SHELL
    Bonjour,

    Je rentre le résultat d'une commande shell dans une scalaire perl. Cette commande SHELL contient elle même une variable perl.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/usr/bin/perl -w
     
    $user=toto;
    $test= `echo $user`;
    print "$test \n";
    Naturellement je travaille sur un script bien plus gros que ce dernier mais le message de warning est le même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Unquoted string "toto" may clash with future reserved word at ./test2.pl line 3.
    Merci de votre aide

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    et ajoute "use strict;" dans ton script

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Par défaut
    Merci Philou,

    J'en profite car je suis un peut coincer là ...
    Quel serait l'equivalent de la commande Shell suivante en perl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getent passwd | awk 'BEGIN { ORS=""; FS=":"} $3 >= 70000 {print$1" "}'
    Attention ! "cat /etc/passwd" et "getent passwd" ne sont pas pareils, getent introduit les utilisateurs LDAP dans le résultat.
    Je suis newbies j'ai dejà commancé à écrire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/usr/bin/perl -w
    @user=split (/:/, `getent passwd `); #
    foreach $input ( @user ) {
    print "$input \n";
    }
    Cela a enlevé le ":" mais comment faire le test sur l'UID et en sortir le login.

    Merci de votre aide

  4. #4
    Membre chevronné Avatar de Beniou
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 357
    Par défaut
    Bonjour,

    En fait moi je ferai ceci :
    1)je récupérerait chaque ligne de la commande
    2) pour chaque ligne je partitionnerais suivant les ":"
    3) test sur ton UID (champ 3) et affichage de ton login (champ 1)
    Ce qui donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    #!/usr/bin/perl -w
     
    use strict;
     
    my @users = `getent passwd `;
     
    foreach my $user ( @users ) {
      chomp($user);
      my @split_info_user = split(":",$user);
     
      my $login = $split_info_user[0];
      my $uid = $split_info_user[2];
     
      if($uid > 70000){
        print $login."\n";
      }
    }

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Par défaut
    Merci Benjou,

    Je vois cela un peut plus clair ..... je l'ai déjà intégrer dans mon script principal
    Cela à l'air de fonctionner sans la "use strict" Ce dernier va me permettre d'envoi des mails automatiques aux utilisateurs abusif.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #!/usr/bin/perl -w
    # Ce script est configure pour etre utilise par la crontab de "adm"
    use strict;
    use MIME::Lite;
    @hostname=(`hostname`);
    my @users = `getent passwd `;
     
    open(ATTACH, ">/tmp/attach.txt") || die "$!";
            print ATTACH "Attention utilisateur  le serveur @hostname\n";
     
                    foreach $user (@users) {
    			chomp($user);
    			my @split_info_user = split(":",$user);
    			my $login = $split_info_user[0];
    			my $uid = $split_info_user[2];
     
    			  if($uid > 70000){
    				@rate=split(' ',`du -sk /home/$login`);
    				if ($rate[0] > 100000000 ) {
    					$mail=`ldapsearch -h localhost -D cn=proxyuser,ou=pam,dc=exemple,dc=org -w xxxxxx -b ou=People,dc=dc=exemple,dc=org uid=$login | grep mail | sed 's/mail\: //'`;
    					@output=split(' ',`du -sh /home/$user`);
    					print ATTACH "\n Votre repertoire depasse les 100Go merci de verifier :\n";
    					print ATTACH "@output \n\n";
    					close (ATTACH);
     
     
    					#Envoi de l'alerte
    					my $msg = new MIME::Lite
    					From    =>'adm@example.org',
    					To      =>'mdubois@example.org',$mail
    					Subject =>'Avertissement de partion pleine sur @hostname',
    					Type    =>'multipart/mixed';                    
    					attach $msg
    					Type =>'TEXT', 
    					Data =>"Resultat dans le fichier joint"; 
    					attach $msg 
    					Type     =>'TEXT', 
    					Path     =>'/tmp/attach.txt', 
    					Filename =>'/tmp/attach.txt'; 
     
    					$msg-> send;
    					#On efface le fichier  
    					unlink </tmp/attach.txt>;
    				}
    			}
    		}
    C'est du brut de fonderie je suis encore entrain de peaufiner apparemment cela fonctionne
    Encore Merci

  6. #6
    Membre chevronné Avatar de Beniou
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 357
    Par défaut
    C'est normal que ton script tel qu'il est ne fonctionne pas avec le pragma use strict : en effet, cela rend, entre autre, obligatoire de déclarer toute variable utilisée pour la première fois avec le mot clé "my". Ensuite tu peux la réutiliser directement.
    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    use strict;
     
    my $var = "toto";
    $var = "titi";
    En Perl on préconise d'utiliser ce pragma strict ainsi que le "warnings" (appelé dans ton script dans la première ligne par le -w).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/06/2009, 10h54
  2. Réponses: 7
    Dernier message: 09/12/2007, 11h51
  3. Réponses: 1
    Dernier message: 20/04/2007, 09h12
  4. [PHP-JS] mettre une variable javascript dans une variable php
    Par Mounr dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/04/2007, 09h09
  5. récupérer une variable javascript dans une variable java
    Par tx dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/07/2006, 17h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo