Quero pesquisar uma string em um arquivo, e depois de muito pesquisar neste site, acabei usando a instrução grep
in e if
. No entanto, as coisas não estão funcionando como eu esperava, embora eu tenha seguido todas as instruções que encontrei em outras postagens relacionadas. Aqui está meu código.
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
Acho que o principal problema é a maneira como estou lendo meus argumentos de linha de comando.
Responder1
Se um script não estiver funcionando como você espera, uma das primeiras coisas que você pode tentar é adicionar set -x
antes do ponto problemático no código (neste caso, antes do grep
) e executar o script. Você verá então qual é o scriptna verdadefazendo, para que você possa comparar isso com o que vocêesperarisso estar fazendo.
No seu caso, o problema pode ser _
um caractere válido em nomes de variáveis, então você está tentando usar o valor de $string1_from_
em vez $string1
do esperado. É por isso que é uma boa prática, mesmo sem usar manipulações sofisticadas, colocar os nomes das variáveis entre chaves. Por exemplo:
if grep -q "dicounter_${string1}_from_${string2}" MasterFile.txt; then
echo "dicounter_${string1}_from${string2} already exists in MasterFile."
else
[..]