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
Adam Poyser
la source
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
1
Vous avez besoin d'un double guillemet autour des extensions variables Lire Pourquoi mon script shell s'étouffe-t-il avec les espaces ou d'autres caractères spéciaux?
Gilles 'SO- arrête d'être méchant'

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
GMaster
la source
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.

user85015
la source
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'