Bash

Résolu/Fermé
bikette - Modifié par mamiemando le 16/02/2016 à 10:54
mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 - 16 févr. 2016 à 12:06
Bonjour,

Voila je me retrouve à corriger un bash, que voici

#!/bin/bash
# Vérification du paramètre (dossier dico.txt)
# S'il est absent, on signale à l'utilisateur de choisir le dossier dico.txt 
if [ -z $1 ]
then 
 echo 'veuillez rentrer dico.txt en paramètre svp'
else
 sortie=$1
fi
# Vérification s'il existe bien un dossier dico.txt
if [ -f $1 ]
then
 for lettre in {A..Z}
 do
  #première mission: combien de fois est utilisée chaque lettre
  printf "%s - %s -%s\n" $(grep -ic $lettre "$1") $2 $lettre
  #deuxième mission: indication de la 
  somme des mots du dictionnaire
  
 done | sort -rn
else
 echo 'dossier non valide'
fi


Le souci c'est quand je l’exécute il m'affiche n'importe quoi.

Pour la vérification de la présence d'un fichier je ne comprend pas les if

Quelqu'un peut m'éclairer ?


1 réponse

mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 7 748
16 févr. 2016 à 11:03
Bonjour,

Les tests bash sont décrits ici (voir section "Les tests"):
https://openclassrooms.com/fr/courses/43538-reprenez-le-controle-a-laide-de-linux/43394-les-conditions

Le premier test contrôle si la chaîne $1 (premier argument passé au script) est non vide.
Le second contrôle que $1 est un chemin correspondant à un fichier régulier.

Je peux déjà te dire qu'il y a plusieurs fautes :
- les arguments $1, etc devraient être écrits "$1" pour prendre en charge les espaces correctement.
- le programme devrait finir par
exit 0

- si le nombre d'argument est incorrect il devrait déclencher
exit 1
(ou une valeur non nulle), car affecter la variable sortie n'a aucune utilité dans ce script.
- la deuxième ligne du second commentaire "somme des mots..."... n'est pas commentée !
- plutôt qu'un test "-z" pour contrôler le nombre d'argument il faudrait contrôler la valeur de $#.
-
grep -ic
compte le nombre de lignes comportant un caractère donné, pas le nombre d'occurrences de ce caractère.

Bonne chance
0
merci de ta réponse detaillée
0
mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 7 748
16 févr. 2016 à 12:06
De rien, bonne continuation !
0