Aide sur mon script perl

Résolu/Fermé
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 - 11 janv. 2008 à 10:11
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 - 29 janv. 2008 à 14:00
Bonjour,

voici mon script

#!/usr/bin/perl -w
use strict;
use DBI;
use CGI;
 
my $cgi = new CGI;
my $recup = ` sed -e '1,/-\+/d;/^$/,$d' repquota -v/chemin`
my ($user1,$used1,$soft1,$hard1,$grace1,$used2,$soft2,$hard2,$grace2);
 
print "Content-type: text/html\n\n";
 
#Connection à la base de données mysql avec le module dbd::mysql (conncetion à distance)
$dbh = DBI->connect("DBI:mysql:database=$db;host=$host",
                      $user, $password, {RaiseError => 1});
 
#Requete sur la base de donnée 
my $query = sprintf("INSERT INTO foo VALUES (%d, %s)",
                      $number, $dbh->quote("name"));
  $dbh->do($query);
 
while ($ligne = $recup){
# récupération des éléments
 ($user1,$used1,$soft1,$hard1,$grace1,$used2,$soft2,$hard2,$grace2) = split /;/,$ligne;
# et on insere dans la base
  $db->do("insert into client values ('$user1','$used1','$soft1','$hard1','$grace1','$used2','$soft2','$hard2','$grace2')"
 
);
          or die "pb de requete : $DBI::errstr";



Bon on va structurer ce que j'ai vue :

1) il manque un ; à la fin de la ligne 7 : d'accor ou pas d'accord

2) Utiliser Sed est il bon d'apres vous car je ne suis pas sûr de ce que cela filtre.
avec sed voici le principe :

Code :

sed -e '1,/-\+/d;/^$/,$d' rep //rep = fichier
 
root -- 157696 0 0 12 0 0
uucp -- 40 0 0 76 0 0
fradin -- 2304352 2500000 2550000 12465 50000 55000


je ve recupérer les données que je vien de faire avec sed puis les mettre en variable soit :
Code :

my ($user1,$used1,$soft1,$hard1,$grace1,$used2,$soft2,$hard2,$grace2);


d'accord du code ou pas d'accord

3) Pour moi le programme boucle indéfiniement, vu que ni $recup, ni $ligne ne sont modifiés dans la boucle. D'ailleurs, si je comprend bien le code, il serait même plus judicieux de "parser" le résultat du "repquota" dans la boucle. Mais comment ces une de mes grande question



d'autre suggestion sur mon code je suis prenneur merci
A voir également:

51 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
24 janv. 2008 à 15:24
affiche le script
0
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 17
24 janv. 2008 à 15:25
#!/usr/bin/perl
use strict;use warnings;
use DBI;
use Quota;

my $base = 'test';
my $host = '10.27.0.51';
my $user = 'user';
my $pass = '';
my $mysql_sock = '/var/run/mysqld/mysqld.sock';

#Connection à la base de données
#my $db = DBI->connect("DBI:mysql:database=$base;
 #                      host=$host;
  #                     mysql_socket=$mysql_sock",
   #                    $user,
    #                   $pass,
     #                  {RaiseError => 1}
      #               );

my $dev = Quota::getdev('/home'); # à modifier avec ton chemin


while(my ($nom,$uid) = (getpwent())[0,2]){
        my @tmp = Quota::query($dev,$uid);
#                if(scalar(grep{$_!=0}@tmp)>0){
#               my($u1,$s1,$h1,$g1,$u2,$s2,$h2,$g2) =  @tmp;
                print "$u1,$s1,$h1,$g1,$u2,$s2,$h2,$g2\n";
        }
 #}

__END__
~                                                                                                                                                            
~                                                                                                                                                            
~                                                                                                                                                            
~                                                                                                                                                            
~                                                                                                                                                            
~                                                                                                                                                            
~                   
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
24 janv. 2008 à 15:29
#               my($u1,$s1,$h1,$g1,$u2,$s2,$h2,$g2) =  @tmp;

cette ligne tu ne l'a mets pas en commentaire
0
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 17
24 janv. 2008 à 15:34
./gregperl.pl 
Use of uninitialized value in concatenation (.) or string at ./gregperl.pl line 28.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
24 janv. 2008 à 15:41
fait comme ça

while(my ($nom,$uid) = (getpwent())[0,2]){
        my @tmp = Quota::query($dev,$uid);
#                if(scalar(grep{$_!=0}@tmp)>0){
#               my($u1,$s1,$h1,$g1,$u2,$s2,$h2,$g2) =  @tmp;
#                print "$u1,$s1,$h1,$g1,$u2,$s2,$h2,$g2\n";
 #       }
print "@tmp\n";
 }

0
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 17
24 janv. 2008 à 15:46
voila se que j'ai dans mon script

#!/usr/bin/perl
use strict;use warnings;
use DBI;
use Quota;

my $base = 'test';
my $host = '10.27.0.51';
my $user = 'user';
my $pass = '';
my $mysql_sock = '/var/run/mysqld/mysqld.sock';

#Connection à la base de données
#my $db = DBI->connect("DBI:mysql:database=$base;
 #                      host=$host;
  #                     mysql_socket=$mysql_sock",
   #                    $user,
    #                   $pass,
     #                  {RaiseError => 1}
      #               );

my $dev = Quota::getdev('/home'); # à modifier avec ton chemin

while(my ($nom,$uid) = (getpwent())[0,2]){
        my @tmp = Quota::query($dev,$uid);
#                if(scalar(grep{$_!=0}@tmp)>0){
#               my($u1,$s1,$h1,$g1,$u2,$s2,$h2,$g2) =  @tmp;
#                print "$u1,$s1,$h1,$g1,$u2,$s2,$h2,$g2\n";
 #       }
print "@tmp\n";
 }
~                                                                                                                                                            
~                                                                                                                                                            
~                                                                                                                                                            
~                                                                                                                                                            
~                                                                                                                                                            
~                                                                                                                                                            
~                   


Et sa me donne un gros trou blanc !! quand je l'execute ( trou blanc = a la ligne plein de fois )
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
24 janv. 2008 à 16:57
affiche le résultat de la commande (attention c'est une seule ligne)
 perl -MQuota -e '$dev=Quota::getdev("/home"); while(my ($nom,$uid) = (getpwent())[0,2]){ print Quota::query($dev,$uid),"\n"}'

ainsi que
repquota /dev/hda1



0
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 17
24 janv. 2008 à 17:15
alors :

perl -MQuota -e '$dev=Quota::getdev("/home"); while(my ($nom,$uid) = (getpwent())[0,2]){ print Quota::query($dev,$uid),"\n"}'


pareil que le script que de l'affichage null

et voici le deuxieme :

repquota /dev/hda1
*** Rapport pour les quotas user sur le périphérique /dev/hda1
Période de sursis bloc : 7days ; période de sursis inode : 7days
                        Limites bloc               Limites fichier
Utilisateur     utilisé souple stricte sursis utilisé souple stricte sursis
----------------------------------------------------------------------
root      --   10921       0       0             28     0     0       
test      --       4    9000   10000              4  9000 10000     
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
24 janv. 2008 à 19:16
exécute le script en tant que root

regarde chez moi

en tant que lami20j
lami20j@debian:~$  perl -MQuota -e '$dev=Quota::getdev("/home"); while(my ($nom,$uid) = (getpwent())[0,2]){ print Quota::query($dev,$uid),"\n"}'

























1876318800098012000










lami20j@debian:~$
en tant que root
debian:~# perl -MQuota -e '$dev=Quota::getdev("/home"); while(my ($nom,$uid) = (getpwent())[0,2]){ print Quota::query($dev,$uid),"\n"}'
1762000004000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
1876318800098012000
00000000
160004000
00000000
00000000
00000000
00000000
00000000
160004000
160004000
00000000
debian:~#
0
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 17
25 janv. 2008 à 09:24
Oui je les fait en root ,


Je vien de voir un soucis au niveau de mes quotas quand je fait quotaon j'ai un messages d'erreur :(
0
specimen35 Messages postés 343 Date d'inscription vendredi 14 décembre 2007 Statut Membre Dernière intervention 16 août 2011 17
29 janv. 2008 à 14:00
ok c'est bon c'étais mon quota qui étais mal fait quand je faisait quotaon -a j'avais une erreur donc c'est bon mainteanant je part sur un script pour les quota impression et mail. je vais ouvrrir un autre topic pour cela , . Je vais toujours garder les meme script que l'on a fait pour les suota disque et essayer de voir si on peut le faire avec les quota impression et mail !!

Voila et encore merci ( maintenant si tu veut m'aider pour les autres script :) je ne dirais pas non lol )

En tout les cas je dirai : ENCORE UNE VICTOIRE DE CAN... EU DE LAMI20J
0