#1 Le 31/05/2016, à 16: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, à 17:11)
Hors ligne
#2 Le 31/05/2016, à 16: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, à 17:02)
Hors ligne
#3 Le 31/05/2016, à 17: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, à 17: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, à 18: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, à 18: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