Pages : 1
#1 Le 16/12/2013, à 12:44
- Romain2505
[RÉSOLU] Script bash de recherche
Bonjour tout le monde,
C'est mon premier message sur les forums Ubuntu alors que je les consulte régulièrement... Shame on me. D'ailleurs, j'espère ne pas créer un doublon avec mon post, mais je n'ai rien trouvé correspondant à mes attentes.
Voici mon problème : je cherche à écrire un script bash qui rechercherait dans les fichiers du dossier courant une chaîne de caractères donnée.
Voici le script déjà écrit :
#!/bin/bash
# Recherche une suite de catactères dans un fichier et crée un fichier pour stocker les résultats
echo "================================================================================"
echo "Lancement du script de recherche pour la chaîne '$1'"
grep -n -R "$1" * > recherche.txt
echo -e "\e[32mRecherche effectuée.\e[0m"
ligne=$(wc -l recherche.txt | cut -f1 -d' ')
if [ligne = "0"]; then
echo 'La chaîne "$1" n\'a pas été trouvée dans les fichiers de ce dossier.'
else if [ligne = "1"]; then
echo '1 occurence trouvée.'
echo "Les résultats se trouvent dans le fichier recherche.txt"
else
echo ' occurences trouvées.'
echo "Les résultats se trouvent dans le fichier recherche.txt"
fi
echo "================================================================================"
exit 0
Seulement, j'obtiens les messages d'erreur suivants :
ligne 16 : unexpected EOF while looking for matching ''
ligne 21 : syntax error : unexpected end of file
J'avoue être un peu perdu.. Si quelqu'un pourrait me filer un coup de pouce, ça serait vraiment sympathique :-)
Une bonne journée à tout le monde, et merci d'avance.
Romain
Dernière modification par Romain2505 (Le 16/12/2013, à 14:59)
Hors ligne
#2 Le 16/12/2013, à 12:49
- Postmortem
Re : [RÉSOLU] Script bash de recherche
Salut,
Déjà, ici, remplacer :
if [ligne = "0"]; then
echo 'La chaîne "$1" n\'a pas été trouvée dans les fichiers de ce dossier.'
else if [ligne = "1"]; then
echo '1 occurence trouvée.'
echo "Les résultats se trouvent dans le fichier recherche.txt"
else
echo ' occurences trouvées.'
echo "Les résultats se trouvent dans le fichier recherche.txt"
fi
Par :
if [ $ligne -eq 0 ]; then
echo "La chaîne '$1' n'a pas été trouvée dans les fichiers de ce dossier."
elif [ $ligne -eq 1 ]; then
echo '1 occurence trouvée.'
echo "Les résultats se trouvent dans le fichier recherche.txt"
else
echo "$ligne occurences trouvées."
echo "Les résultats se trouvent dans le fichier recherche.txt"
fi
Edit :
Tu peux aussi remplacer :
grep -n -R "$1" * > recherche.txt
Par :
grep -n -R "$1" . > recherche.txt
Comme tu le fais, ta recherche ne prend pas en compte les fichiers/dossiers cachés qui sont dans le répertoire courant.
Tu peux aussi simplifier :
ligne=$(wc -l recherche.txt | cut -f1 -d' ')
Par :
ligne=$(wc -l < recherche.txt)
Dernière modification par Postmortem (Le 16/12/2013, à 13:04)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#3 Le 16/12/2013, à 14:40
- Romain2505
Re : [RÉSOLU] Script bash de recherche
Bonjour,
Merci pour votre réponse, je ne connaissais pas la fonction " -eq " :-)
J'ai corrigé le code et il ne me reste que l'erreur de la ligne 21, sachant que je n'ai que 20 lignes... :-/
Romain
Dernière modification par Romain2505 (Le 16/12/2013, à 14:40)
Hors ligne
#4 Le 16/12/2013, à 14:41
- Postmortem
Re : [RÉSOLU] Script bash de recherche
Peux tu nous mettre tout le script ?
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#5 Le 16/12/2013, à 14:57
- Romain2505
Re : [RÉSOLU] Script bash de recherche
Problème résolu :-)
Merci pour les corrections en tout cas :-)
Ça passait pas avec les -eq et ça passe avec les ==, je sais pas trop pourquoi... :-S
#!/bin/bash
# Recherche une suite de catactères dans un fichier
# et crée un fichier pour stocker les résultats
echo "================================================================================"
echo "Lancement du script de recherche pour la chaîne '$1'"
grep -n -R "$1" . > /home/recherche.txt
echo -e "\e[32mRecherche effectuée.\e[0m"
ligne=$(wc -l < /home/recherche.txt)
if [ ligne == 0 ]
then
echo "La chaîne '$1' n'a pas été trouvée dans les fichiers de ce dossier."
elif [ ligne == 1 ]
then
echo "$ligne occurence trouvée."
echo "Les résultats se trouvent dans le fichier recherche.txt"
else
echo "$ligne occurences trouvées."
echo "Les résultats se trouvent dans le fichier recherche.txt"
fi
echo "================================================================================"
exit 0
Dernière modification par Romain2505 (Le 16/12/2013, à 14:58)
Hors ligne
#6 Le 16/12/2013, à 15:06
- Postmortem
Re : [RÉSOLU] Script bash de recherche
Tes tests ne sont pas bons ; en faisant :
if [ ligne == 0 ]
Tu compares le mot ligne à 0. Ton test sera donc systématiquement faux.
If faut faire :
if [ $ligne -eq 0 ]
Si tu fais :
if [ $ligne == 0 ]
Tu compares la valeur de la variable ligne à la chaîne de caractère "0".
Par exemple, si $ligne vaut 00, alors [ $ligne == 0 ] sera faux, alors que [ $ligne -eq 0 ] sera vrai (avec -eq, c'est un comparaison d'entiers)
Dernière modification par Postmortem (Le 16/12/2013, à 15:07)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#7 Le 16/12/2013, à 15:42
- Romain2505
Re : [RÉSOLU] Script bash de recherche
Re,
En effet, mais le fait de changer par -eq 0 ne permet malheureusement pas de prévenir qu'il n'y a aucune occurence. Il passe directement dans le else final... :-S
Hors ligne
#8 Le 16/12/2013, à 15:53
- Postmortem
Re : [RÉSOLU] Script bash de recherche
C'est bizarre...
$ cat test.sh
#!/bin/bash
# Recherche une suite de catactères dans un fichier
# et crée un fichier pour stocker les résultats
echo "================================================================================"
echo "Lancement du script de recherche pour la chaîne '$1'"
grep -n -R "$1" . > ./recherche.txt
echo -e "\e[32mRecherche effectuée.\e[0m"
ligne=$(wc -l < ./recherche.txt)
if [ $ligne -eq 0 ]
then
echo "La chaîne '$1' n'a pas été trouvée dans les fichiers de ce dossier."
elif [ $ligne -eq 1 ]
then
echo "$ligne occurence trouvée."
echo "Les résultats se trouvent dans le fichier recherche.txt"
else
echo "$ligne occurences trouvées."
echo "Les résultats se trouvent dans le fichier recherche.txt"
fi
echo "================================================================================"
exit 0
$ ./test.sh fgsdfgsfdgsdfgsg
================================================================================
Lancement du script de recherche pour la chaîne 'fgsdfgsfdgsdfgsg'
Recherche effectuée.
La chaîne 'fgsdfgsfdgsdfgsg' n'a pas été trouvée dans les fichiers de ce dossier.
================================================================================
$ ./test.sh toto
================================================================================
Lancement du script de recherche pour la chaîne 'toto'
Recherche effectuée.
27 occurences trouvées.
Les résultats se trouvent dans le fichier recherche.txt
================================================================================
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#9 Le 16/12/2013, à 15:59
- Romain2505
Re : [RÉSOLU] Script bash de recherche
En relisant mon code, j'ai trouvé mes erreurs :
[ ligne -eq 0 ]
Cela fonctionne mieux lorsque l'on met une variable...
[ $ligne -eq 0 ]
Encore merci de ta patience. Je pense être au bout cette fois !
Hors ligne
#10 Le 16/12/2013, à 16:11
- Postmortem
Re : [RÉSOLU] Script bash de recherche
Encore merci de ta patience. Je pense être au bout cette fois !
Pas de souci !
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne