Verwenden von grep in einer if-else-Anweisung [geschlossen]

10

Warum mein Code nicht ausgegeben wird, wenn eine eingegebene Zeichenfolge nicht in der Datei enthalten ist. Wenn ich eine Zeichenfolge eingebe und diese nicht in der Datei enthalten ist, erfolgt keine Antwort zurück, sondern es wird eine Wiederholung zum Anfang ausgeführt. Kann mir jemand sagen, was mit meinem Code nicht stimmt?

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
quelle
3
Was erwarten Sie?
Patrick
Es sollte heißen, dass eine Zeichenfolge, die Sie eingeben, in der Datei danach sucht und ob diese Zeichenfolge vorhanden ist. Ich habe jetzt festgestellt, dass ich für andere ein weiteres Stück Code eingeben muss. Vielen Dank
Adam Poyser
input_stringist übrigens nicht wirklich ein sprechender Variablenname :)
Marian
1
Sie benötigen doppelte Anführungszeichen für variable Erweiterungen. Lesen Sie, warum mein Shell-Skript Leerzeichen oder andere Sonderzeichen verschluckt.
Gilles 'SO - hör auf böse zu sein'

Antworten:

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
quelle
1
Ich habe gerade diesen Code ausprobiert und er funktioniert danke! Ich wusste nicht, dass mein ganzes Problem darin bestand, keine andere Aussage zu haben. Vielen Dank für die schnelle Antwort
Adam Poyser
2
Sie müssen grep-Parameter angeben. Überlegen Sie, was passieren würde, wenn meine Suchzeichenfolge enthält -voder der Dateiname Leerzeichen enthält.
Ángel
0

Sie haben Ihren fehlenden else-Zweig herausgefunden, aber einen Vorschlag:

anstatt zu $input_string $input_string1versuchen , versuche ${input_string} ${input_string1}nur sicherzustellen, dass dir nicht $input_string1 folgt.

user85015
quelle
Nein, Ihr vorgeschlagener Ersatz entspricht genau dem Original. $input_string1ist der Wert der Variablen input_string1(geteilt und global, da er nicht in Anführungszeichen steht), die Variable ist nicht beteiligt input_string.
Gilles 'SO- hör auf böse zu sein'