Je suis newbies en PERL. J'essaie de contruire un eptit script qui sortirait le pourcentage de l'utilisation des disques. Mon soucis c'est que mon script donne la ligne en entière et non pas la liste du champ désiré.
Voici mon script :
#!/usr/bin/perl -w
@disque=` df -h`;
foreach (@disque)
{print @disque[2]);
}
Merci de votre aide
# A tester et à adapter
Posté par JJD . Évalué à 1.
foreach (`df -hP | tail -n +2`) {
my @i=split;
print "$i[0]\t($i[5])\t$i[4]\n";
}
[^] # Adaptation
Posté par dubis . Évalué à 2.
J'ai améliorer très succinctement ta correction. En effet j'ai enlevé le caractère % pour pouvoir faire une condition tel que :
#!/usr/bin/perl -w
foreach (`df -h`) {
s/%/ /;
my @i=split;
if ($i[4] > 25 )
print "$i[0]\t($i[5])\t$i[4]\n";
}
ça plante au niveau de la condition car je ne sais pas comment l'insérer même avec { }....
Un avis ???
[^] # Re: Adaptation
Posté par dubis . Évalué à 2.
#!/usr/bin/perl
print "Partion pleine\n";
print "Partion\t\t Monté sur\t utilisé à\n";
foreach (`df -h | tail +2 2>/dev/null`) {
s/%//;
my @i=split;
if ($i[4] > 25 ) {
print "$i[0]\t($i[5])\t\t$i[4]%\n";
}
}
[^] # super Adaptation
Posté par dubis . Évalué à 1.
trouvé ici :
http://www.alianwebserver.com/informatique/languages/perl/ma(...)
Donc le script devient :
#!/usr/bin/perl -w
use MIME::Lite;
sub envoi {
print "Partion pleine\n";
print "Partion\t\t Mont\303\251 sur\t utilis\303\251 \303\240\n";
foreach (`df -h | tail +2 2>/dev/null`) {
s/%//;
my @i=split;
if ($i[4] > 25 ) {
print "$i[0]\t($i[5])\t\t$i[4]%\n";
}
}
}
my $msg = new MIME::Lite
From =>'toto@hostname.org',
To =>'mdubois@polytech.unice.fr',
Subject =>'A simple text message',
Type =>'TEXT',
Data => print envoi();
$msg -> send;
Mon soucis c'est que le mail est vide .... Je suis un peut dépassé là mais merci de votre aide
[^] # Re: super Adaptation
Posté par dubis . Évalué à 1.
#!/usr/bin/perl -w
use MIME::Lite;
@hostname=(`hostname`);
open( ATTACH, ">attach.txt") || die "$!";
print ATTACH "Attention Partion pleine sur le serveur @hostname\n";
print ATTACH "Partion\t\t Monté sur\t utilisé à\n";
foreach (`df -h | tail +2 2>/dev/null`) {
s/%//;
my @i=split;
if ($i[4] > 25 ) {
print ATTACH "$i[0]\t($i[5])\t\t$i[4]%\n";
}
}
close (ATTACH);
my $msg = new MIME::Lite
From =>'adm@hostname.org',
To =>'user@hostname.com',
Subject =>'Avertissement de partion pleine',
Type =>'multipart/mixed';
attach $msg
Type =>'TEXT',
Data =>"Resultat dans le fichier joint";
attach $msg
Type =>'TEXT',
Path =>'attach.txt',
Filename =>'attach.txt';
$msg-> send;
Merci de votre aide
[^] # Re: super Adaptation
Posté par dubis . Évalué à 1.
Merci de votre aide
[^] # print envoi() ?!
Posté par B. franck . Évalué à 1.
sinon un "pipe" sur la commande système "mail" peut fonctionner aussi
à la place du fichier temporaire, il suffit de lui envoyer le corp du mail.
[^] # Re: print envoi() ?!
Posté par dubis . Évalué à 1.
Peux tu en dire plus à propos du pipe ?
Sinon j'efface le fichier avec la commande suivante que j'ai trouvé sur le web et qui fonctionne :
unless (fork) {
unlink </var/adm/attach.txt>;
exit;
}
Merci de votre aide
[^] # ouverture de pipe
Posté par B. franck . Évalué à 1.
http://perldoc.perl.org/functions/open.html
# Sed est ton ami
Posté par godzom . Évalué à 1.
# awk !
Posté par mekare . Évalué à 2.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.