Problème avec une commande perl

Résolu/Fermé
steph - 19 mars 2008 à 00:50
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 19 mars 2008 à 13:39
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.;)
A voir également:

4 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
19 mars 2008 à 07:15
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
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
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
19 mars 2008 à 11:07
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
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
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
19 mars 2008 à 13:39
Re,

mais je viens de trouver;)
t'avais la solution sous ton nez Peut être qu'il faut utiliser la fonction system() dans ton cas
0