Использование grep в операторе if-else [закрыто]

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
if grep -q $input_string $input_string1 ; then
echo  "Your string has been found"
fi
done
Адам Пойсер
источник
3
Чего вы ожидаете?
Патрик
Он должен был сказать, что строка, которую вы вводите, ищет ее в файле и говорит, присутствует ли эта строка. Теперь я понял, что мне нужно ввести другой бит кода для другого. Спасибо
Адам Пойсер,
input_stringкстати, на самом деле не говорящее имя переменной :)
Marian
1
Вам нужно двойные кавычки вокруг переменных расширения. Прочитайте Почему мой сценарий оболочки задыхается от пробелов или других специальных символов?
Жиль "ТАК ... перестать быть злым"

Ответы:

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
источник
1
Я только что попробовал этот код, и он работает, спасибо! Я не понимал, что вся моя проблема была в том, что я не имел другого заявления. Спасибо за быстрый ответ
Адам Пойсер,
2
Вам нужно указать параметры grep. Подумайте, что произойдет, если моя строка поиска будет содержать -vили в имени файла будут пробелы.
Анхель
0

Вы выяснили свою недостающую ветку else, но есть одно предложение:

вместо использования $input_string $input_string1попробуйте ${input_string} ${input_string1}просто убедиться, что вы не получите $input_string1.

user85015
источник
Нет, предложенная вами замена в точности соответствует оригиналу. $input_string1это значение переменной input_string1(split и globbed, поскольку оно не заключено в кавычки), оно не включает переменную input_string.
Жиль "ТАК - перестать быть злым"