Problème avec une commande perl

Résolu
steph -  
lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
Bonjour, je suis comme beaucoup en train de travailler sur un projet linux.

J'ai écrit une parti de script qui est :

#!/usr/bin/perl -w

print "Veuillez indiquer le disque.\n\n";
chop ($disk = <STDIN>);
`fdisk /dev/$disk`;

Donc ça s'exécute mais pas comme voulu. L'ordinateur nous interroge. Disons quand rentrant par exemple "hda". Le script ne donne rien bien que le disk hda est bien présent.

Je fait ici la même manip que fdisk /dev/hda. Sauf que je laisse le chois à l'utilisateur de rentrer le disque.
Je ne vous demande pas de me faire mon travail car je fais moi même mais c'est juste un moyen de me dépatouiller.

Voila merci.;)
Configuration: Windows Vista
Firefox 2.0.0.12

4 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    chop supprime le dernier caractère de la chaîne tandis que chomp supprime le caractère de saut de ligne \n
    mieux vaux utiliser chomp

    Les apostrophes simples `commande` , permettent de capturer le résultat d'une commande système
    Peut être qu'il faut utiliser la fonction system() dans ton cas

    Voici un exemple
    lami20j@debian:~$ echo salut
    salut
    lami20j@debian:~$ perl -e '$var = `echo salut`; print $var'
    salut
    lami20j@debian:~$ perl -e 'system("echo salut")'
    salut
    lami20j@debian:~$
    Il sera peut être bien de nous dire ce que tu veux faire puisque exécuter un fdisk avec un script perl, je ne vois pas .....

    Pour le début de script tu peux, et c'est même conseiller d'utliser
    #!/usr/bin/perl
    use strict; use warnings;


    ce qui donne dans ton cas
    #!/usr/bin/perl
    use strict; use warnings;
    
    print "Veuillez indiquer le disque.\n\n";
    chomp (my $disk = <STDIN>); 


    Exemple 1 (avec les apostrophes simples ou l'opérateur qx// )
    lami20j@debian:~$ cat fdisk.pl
    #!/usr/bin/perl
    use strict; use warnings;
    
    print "Veuillez indiquer le disque.\n\n";
    chomp (my $disk = <STDIN>);
    
    my $var = qx{/sbin/fdisk -l /dev/$disk}; #qx{commande} ext equivalent de `commande`
    print "$var";
    __END__
    lami20j@debian:~$ sudo perl fdisk.pl
    Veuillez indiquer le disque.
    
    hda
    
    Disk /dev/hda: 164.6 GB, 164696555520 bytes
    255 heads, 63 sectors/track, 20023 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/hda1   *           1        1276    10249438+   7  HPFS/NTFS
    /dev/hda2            1277       13837   100896232+   f  W95 Ext'd (LBA)
    /dev/hda5            1277        8925    61440561    7  HPFS/NTFS
    /dev/hda6            8926        8974      393561   82  Linux swap / Solaris
    /dev/hda7            8975       10190     9767488+  83  Linux
    /dev/hda8           10191       13837    29294496   83  Linux
    lami20j@debian:~$
    

    Exemple 2 avec system (si tu veux seulement capturer utlise qx)
    lami20j@debian:~$ cat fdisk2.pl
    #!/usr/bin/perl
    use strict; use warnings;
    
    print "Veuillez indiquer le disque.\n\n";
    chomp (my $disk = <STDIN>);
    
    system("/sbin/fdisk", "-l", "/dev/$disk");
    __END__
    lami20j@debian:~$ sudo perl fdisk2.pl
    Veuillez indiquer le disque.
    
    hda
    
    Disk /dev/hda: 164.6 GB, 164696555520 bytes
    255 heads, 63 sectors/track, 20023 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/hda1   *           1        1276    10249438+   7  HPFS/NTFS
    /dev/hda2            1277       13837   100896232+   f  W95 Ext'd (LBA)
    /dev/hda5            1277        8925    61440561    7  HPFS/NTFS
    /dev/hda6            8926        8974      393561   82  Linux swap / Solaris
    /dev/hda7            8975       10190     9767488+  83  Linux
    /dev/hda8           10191       13837    29294496   83  Linux
    lami20j@debian:~$
    
    0
    1. steph
       
      Je vous explique ce que je souhaite faire. En fait je souhaite appeler la commande fdisk qui est comme tu le sais un utilitaire de disque. Il s'utilise sur le principe suivant: fdisk /dev/sda ou fdisk /dev/hda. Par concéquant je souhaite utiliser cet utilitaire de partitionnement en laissant le choix à l'utilisateur de choisir le disque.
      et ceci dans un script perl d'où ma rédaction.

      #!/usr/bin/perl -w
      use strict; use warnings;

      print "Veuillez indiquer le disque sur lequel vous souhaitez appliquer l'utilitaire de partitionnement.\n\n";
      chomp (my $disk = <STDIN>);
      `fdisk /dev/$disk`;

      normalement apres que l'utilisateur rentre le disque l'utilitaire suivant devrait être lancé

      Commande (m pour l'aide): m
      Commande action
      a bascule le fanion d'amorce
      b éditer l'étiquette BSD du disque
      c basculer le fanion de compatibilité DOS
      d détruire la partition
      l lister les types de partitions connues
      m afficher ce menu
      n ajouter une nouvelle partition
      o créer une nouvelle table vide de partitions DOS
      p afficher la table de partitions
      q quitter sans faire de sauvegarde
      s créer une nouvelle étiquette vide pour disque de type Sun
      t modifier l'identificateur de la partition système
      u modifier l'affichage et la saisie des unités
      v vérifier la table de partitions
      w écrire la table sur le disque et quitter
      x fonctionnalité additionnelle (pour experts seulement)

      merci,
      0
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Dans ton projet, tu dois créer un menu qui ensuite permettra à ton script d'utiliser des utilitaires système?
    Peut être que si tu diras en quoi consiste ton projet, ça sera plus facile pour t'aider.
    0
  3. steph
     
    merci pour toutes vos réponse mais je viens de trouver;)
    il suffit d'applique system " " et d'y insérer la commande entre les guillemet.

    #!/usr/bin/perl -w
    use strict; use warnings;

    print "Veuillez indiquer le disque sur lequel vous souhaitez appliquer l'utilitaire de partitionnement.\n\n";
    chomp (my $disk = <STDIN>);
    system "fdisk /dev/$disk";

    merci et si j'ai pu aider quelqu'un ;);)
    0