Я хочу найти строку в файле, и после долгих поисков на этом сайте я в конечном итоге использовал оператор grep
in 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
[..]