Usando grep e if no Script do Shell

2

Eu quero pesquisar uma string em um arquivo e, depois de pesquisar muito neste site, acabei usando as instruções 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 outros posts relacionados. Aqui está o 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

O principal problema que eu acho é com a maneira que estou lendo em meus argumentos de linha de comando.

    
por Ptheguy 31.05.2017 / 17:47

1 resposta

7

Se um script não estiver funcionando como esperado, uma das primeiras coisas que você pode tentar é adicionar set -x antes do ponto problemático no código (nesse caso, antes do grep ) e executando o script. Você então verá o que o script está realmente fazendo, para que você possa compará-lo ao que você espera que ele esteja fazendo.

No seu caso, o problema pode ser que _ é um caractere válido em nomes de variáveis, portanto, você está tentando usar o valor de $string1_from_ em vez de $string1 conforme o esperado. É por isso que é uma boa prática, mesmo que não esteja usando manipulações sofisticadas, incluir seus nomes de variáveis em chaves. Por exemplo:

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