Passer un argument à des programmes Perl à partir de Bash

Résolu
artagon7 Messages postés 415 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 11 février 2024 - 2 sept. 2023 à 15:24
artagon7 Messages postés 415 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 11 février 2024 - 3 sept. 2023 à 02:59

Bonjour,

Je voudrais savoir s'il est possible, dans un script Bash, de passer un argument (ici, la variable contiendrait simplement une lettre) à des programmes Perl.

Tous mes programmes Perl fonctionnent bien. Cependant, lorsque la première lettre des mots change, je dois changer le nom de tous les fichiers .txt en changeant la lettre.

Par exemple, si j'ai fait le traitement des deux fichiers suivants :

  mots-a-animaux.txt
  mots-a-fruits.txt

et que je veuille faire le traitement des fichiers désignés par une autre lettre, 'b' par exemple,

  mots-b-animaux.txt
  mots-b-fruits.txt

je dois aller dans chaque script Perl et changer la lettre 'a' pour la lettre 'b' dans le nom de chaque fichier. Je voudrais changer la lettre au début de mon script Bash et la passer comme argument aux scripts Perl.

A) Mon programme Bash (appel d'un seul programme Perl, pour fin de simplicité) est :

#!/bin/bash
*
lettre="a"
*
perl comptage.pl (lettre)     # Ça ne fonctionne pas.


*
*

B) et mon script Perl comptage.pl (qui compte les lignes de chaque fichier) est :
*
 

#!/usr/bin/perl
*
open(FICHIER_ENTREE_1, "../2-Entrees/mots-$lettre-animaux.txt") or die "Le fichier ne s'ouvre pas: $!";
open(FICHIER_ENTREE_2, "../2-Entrees/mots-$lettre-fruits.txt") or die "Le fichier ne s'ouvre pas: $!";
*
open(FICHIER_SORTIE, ">../3-Sorties/mots-$lettre-sortie.txt") or die "Le fichier ne s'ouvre pas: $!";
*
while(<FICHIER_ENTREE_1>)
{$i=++$i;}
print FICHIER_SORTIE "$i\n";
*
$i=0;
while(<FICHIER_ENTREE_2>)
{$i=++$i;}
print FICHIER_SORTIE "$i\n";
*
*
close FICHIER_ENTREE_1;
close FICHIER_ENTREE_2;
close FICHIER_SORTIE;

J'ai essayé ces deux scripts mais ça ne fonctionne pas.

Merci

1 réponse

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
2 sept. 2023 à 16:54

Bonjour,

Tu peux passer des arguments lorsque tu appelles des scripts

regardes du côte de ARGV

https://perlmaven.com/argv-in-perl


0
artagon7 Messages postés 415 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 11 février 2024 7
3 sept. 2023 à 02:59

Salut jordane45,

  J'ai lu ta référence. Ça a fonctionné.

Pour celles et ceux que ça intéresse, voici mes deux scripts :

*
* Script Bash
*

#!/bin/bash

lettre="a"
perl comptage.pl $lettre

*
* Script Perl comptage.pl
*

#!/usr/bin/perl

my $lettre = $ARGV[0];

print "$lettre\n\n";

open(FICHIER_ENTREE_1, "../2-Entrees/mots-$lettre-animaux.txt") or die "Le fichier ne s'ouvre pas: $!";
open(FICHIER_ENTREE_2, "../2-Entrees/mots-$lettre-fruits.txt") or die "Le fichier ne s'ouvre pas: $!";
open(FICHIER_SORTIE, ">../3-Sorties/mots-$lettre-sortie.txt") or die "Le fichier ne s'ouvre pas: $!";

while(<FICHIER_ENTREE_1>)
{$i=++$i;}
print FICHIER_SORTIE "$i\n";

$i=0;
while(<FICHIER_ENTREE_2>)
{$i=++$i;}
print FICHIER_SORTIE "$i\n";

close FICHIER_ENTREE_1;
close FICHIER_ENTREE_2;
close FICHIER_SORTIE;

Au début, ça ne fonctionnait pas. J'avais mis, comme argument, lettre au lieu de $lettre.

Merci beaucoup.

0