Utilisation de grep dans une instruction if-else [fermé]


10

Pourquoi mon code ne sort pas si une chaîne entrée n'est pas dans le fichier. Lorsque j'entre une chaîne et qu'elle n'est pas dans le fichier, il n'y a pas de réponse en arrière, elle revient en boucle au début. Quelqu'un peut-il me dire ce qui ne va pas avec mon code?

while :
do
echo "Please enter a string"
read input_string
echo "Please enter the file name too see if that string is present in it - (Enter .abw after)"
read input_string1
if grep -q $input_string $input_string1 ; then
echo  "Your string has been found"
fi
done

3
À quoi vous attendez-vous?
Patrick

Il était censé dire qu'une chaîne que vous entrez, elle la cherche dans le fichier et elle indique si cette chaîne est présente. J'ai maintenant réalisé que je dois entrer un autre morceau de code pour autre chose. Merci
Adam Poyser

input_stringn'est pas vraiment un nom de variable parlante, soit dit en passant :)
Marian

Réponses:


10
while :
 do
     echo "Please enter a string"
     read input_string
     echo "Please enter the file name too see if that string is present in it - (Enter .abw after)"
     read input_string1
     grep -q "${input_string}" "${input_string1}"                                                                 
     if [ $? -eq 0 ] ; then
         echo  "Your string has been found"
     else 
         echo "Your string has not been found"
     fi
 done

1
Je viens d'essayer ce code et ça marche merci! Je ne savais pas que tout mon problème était de ne pas avoir de déclaration else. Merci pour la réponse rapide
Adam Poyser

2
Vous devez citer les paramètres grep. Pensez à ce qui se passerait si ma chaîne de recherche incluait -v, ou s'il y avait des espaces dans le nom de fichier.
Ángel

0

Vous avez trouvé votre autre branche manquante, mais une suggestion:

au lieu d'utiliser, $input_string $input_string1essayez ${input_string} ${input_string1}simplement de vous assurer de ne pas être $input_stringsuivi par 1.


Non, votre remplacement proposé est exactement équivalent à l'original. $input_string1est la valeur de la variable input_string1(divisée et globulée, car elle n'est pas citée), elle n'implique pas la variable input_string.
Gilles 'SO- arrête d'être méchant'
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.