Problème avec une commande perl
Résolu
steph
-
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21331 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.;)
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:
- Problème avec une commande perl
- Invite de commande - Guide
- Commande terminal mac - Guide
- Commande dism - Guide
- Diskpart commande - Guide
- Commande scannow - Guide
4 réponses
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
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
Exemple 1 (avec les apostrophes simples ou l'opérateur qx// )
Exemple 2 avec system (si tu veux seulement capturer utlise qx)
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:~$
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.
Peut être que si tu diras en quoi consiste ton projet, ça sera plus facile pour t'aider.
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 ;);)
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 ;);)
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
mais je viens de trouver;)
t'avais la solution sous ton nez Peut être qu'il faut utiliser la fonction system() dans ton cas
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,