Использование операторов grep и if в скрипте оболочки

Использование операторов grep и if в скрипте оболочки

Я хочу найти строку в файле, и после долгих поисков на этом сайте я в конечном итоге использовал оператор grepin and if. Однако все работает не так, как я ожидал, хотя я следовал всем инструкциям, которые нашел в других связанных постах. Вот мой код.

echo "Enter dicounter number"
read string1
echo "Enter side with LEDs"
read string2

if grep -q "dicounter_$string1_from_$string2" MasterFile.txt; then
   echo "dicounter_$string1_from$string2 already exists in MasterFile."
else
   { (a bunch of stuff to make the transmitter operate) }
fi

Я думаю, что основная проблема заключается в том, как я читаю аргументы командной строки.

решение1

Если скрипт не работает так, как вы ожидаете, одно из первых, что вы можете попробовать, это добавить set -xперед проблемным местом в коде (в данном случае перед grep), и запустить скрипт. Затем вы увидите, что скриптна самом деледелаете, так что вы можете сравнить это с тем, что выожидатьэто делать.

В вашем случае проблема может быть в том, что _это допустимый символ в именах переменных, поэтому вы пытаетесь использовать значение, $string1_from_а не $string1то, что вы ожидаете. Вот почему хорошей практикой является, даже если не используются замысловатые манипуляции, заключение имен переменных в фигурные скобки. Например:

if grep -q "dicounter_${string1}_from_${string2}" MasterFile.txt; then
   echo "dicounter_${string1}_from${string2} already exists in MasterFile."
else
   [..]

Связанный контент