Używanie grep w instrukcji if-else [zamknięte]

10

Dlaczego mój kod nie wyświetla się, jeśli wprowadzony ciąg nie znajduje się w pliku. Kiedy wprowadzam ciąg znaków, którego nie ma w pliku, nie ma odpowiedzi, ponownie zapętla się na początku. Czy ktoś może mi powiedzieć, co jest nie tak z moim kodem?

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
źródło
3
Czego oczekujesz?
Patrick
Miał powiedzieć, że wprowadzony ciąg znaków szuka go w pliku i informuje, czy ten ciąg jest obecny. Teraz zdałem sobie sprawę, że muszę wprowadzić kolejny kawałek kodu, aby uzyskać inne informacje. Dzięki
Adam Poyser
input_stringtak na marginesie, nie jest tak naprawdę mówiącą nazwą zmiennej :)
Marian
1
Potrzebujesz podwójnego cudzysłowu wokół zmiennych rozszerzeń. Przeczytaj Dlaczego mój skrypt powłoki dusi się na białych znakach lub innych znakach specjalnych?
Gilles „SO- przestań być zły”

Odpowiedzi:

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
źródło
1
Właśnie wypróbowałem ten kod i działa dzięki! Nie zdawałem sobie sprawy, że cały mój problem polegał na tym, że nie miałem oświadczenia innego. Dzięki za szybką odpowiedź
Adam Poyser
2
Musisz podać parametry grep. Zastanów się, co by się stało, gdyby mój ciąg wyszukiwania zawierał -vlub w nazwie pliku są spacje.
Ángel
0

Odkryłeś swoją brakującą gałąź else, ale jedna sugestia:

zamiast używać $input_string $input_string1spróbuj ${input_string} ${input_string1}po prostu upewnić się, że nie $input_stringpojawi się 1.

użytkownik85015
źródło
Nie, proponowana wymiana jest dokładnie równoważna oryginałowi. $input_string1to wartość zmiennej input_string1(podzielona i globowana, ponieważ nie jest cytowana), nie obejmuje zmiennej input_string.
Gilles „SO- przestań być zły”