Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 31/05/2016, à 17:46

topopensource

script avec 2 paramètres ne fonctionne pas

Bonjour ,
je suis débutant et j'ai beau avoir cherché des réponses sur le web et sur ce site ,je n'arrive toujours pas a comprendre pourquoi mon script ne marche pas .
Un peu de vos lumières seraient bienvenues
Je m'explique :
nous disposons d'1 fichier nommé dico.txt avec plein de noms tous en majuscules et 1 nom par ligne
Il nous est demandé de trier le nombre de lignes contenant chaque lettre et de l'afficher dans l'ordre décroissant:

on aura par exemple E - 222221
                                  A - 100000 etc ... en appliquant notre script au fichier dico

Pour ce tri , c'est bon si je met à la fin de mon "for" :done | sort -rn
mais lorsque je met mon 2eme paramètre en place , j'ai le message "erreur lecture fichier" , ce qui veut dire que mon 2ème paramètre n'est pas pris en compte ?
Il se peut que j'ai mal placé mes conditions mais j'ai retourné ça dans tous les sens et rien n'y fait .
Voici le script en question :

#!/bin/bash
if [ -z $1 ]
then
echo "paramètre manquant"
exit 1
elif [ -s $1 ] && [ -r $1 ]
then
dico=$1

if [ -z $2 ]
then
       if [ "$2" = "option" ] ------------> 2eme paramètre
       then
       param="sort -rn"
       else
       param="sort -k3"
       fi
       for lettre in {A..Z}
       do
       echo $(grep -c $lettre "$dico") "-" $lettre
       done | $param
else
echo "erreur lecture fichier"
fi
fi

Modération : merci à l'avenir d'utiliser les balises code (explications ici).

Dernière modification par cqfd93 (Le 31/05/2016, à 18:11)

Hors ligne

#2 Le 31/05/2016, à 17:57

pingouinux

Re : script avec 2 paramètres ne fonctionne pas

Bonjour,
Il y aurait des choses à dire sur le script, mais ce test

if [ -z $2 ]

est fait à l'envers (et inutile).

Tu devrais mettre des " " autour de $1 et $2.

Correction

Dernière modification par pingouinux (Le 31/05/2016, à 18:02)

Hors ligne

#3 Le 31/05/2016, à 18:08

bertrand0

Re : script avec 2 paramètres ne fonctionne pas

Ton second test pose problème: tu testes pour une chaîne de longueur nulle, et dans ce cas tu la compares à "option". Je peux déjà te dire que ce sera toujours "sort -k3" qui sera exécuté...

Tu peux sortir tout ce qui est dans le premier membre du if et virer le reste ca fonctionnera beacoup mieux.

#!/bin/bash
if [ -z "$1" ]
then
echo "paramètre manquant"
exit 1
elif [ -s "$1" ] && [ -r "$1" ]
then
dico="$1"

#if [ -z "$2" ]
#then
       if [ "$2" = "option" ] #------------> 2eme paramètre
       then
       param="sort -rn"
       else
       param="sort -k3"
       fi
       for lettre in {A..Z}
       do
       echo $(grep -c $lettre "$dico") "-" $lettre
       done | $param
#else
#echo "erreur lecture fichier"
#fi
fi

Ceux qui écrivent comme ils parlent, quoiqu'ils parlent très bien, écrivent mal.
                                                            Buffon, Discours sur le style

Hors ligne

#4 Le 31/05/2016, à 18:48

topopensource

Re : script avec 2 paramètres ne fonctionne pas

merci a vous 2 pour le retour rapide .
Je vais regarder tout ça.

Hors ligne

#5 Le 31/05/2016, à 19:12

topopensource

Re : script avec 2 paramètres ne fonctionne pas

c'est bon , grâce a vos remarques j'ai trouvé , ça marche nickel .
j'ai enlevé le test sur le 2ème paramètre [ -z $2 ] que j'ai remplacé par [ "$2" != option ] , j'ai ensuite remanié les conditions .
Encore merci , ça faisait un moment que j'étais bloqué .

Hors ligne

#6 Le 31/05/2016, à 19:27

Rufus T. Firefly

Re : script avec 2 paramètres ne fonctionne pas

A tout hasard, la bible de bash...


La provocation est une façon de remettre la réalité sur ses pieds. (Bertolt Brecht)
Il n'y a pas de route royale pour la science et ceux-là seulement ont chance d'arriver à ses sommets lumineux qui ne craignent pas de se fatiguer à gravir ses sentiers escarpés. (Karl Marx)
Il est devenu plus facile de penser la fin du monde que la fin du capitalisme

Hors ligne