Quiero buscar una cadena en un archivo y, después de buscar mucho en este sitio web, terminé usando grep
una if
declaración. Sin embargo, las cosas no funcionan como esperaba, a pesar de que seguí todas las instrucciones que encontré en otras publicaciones relacionadas. Aquí está mi 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
Creo que el principal problema es la forma en que leo los argumentos de mi línea de comando.
Respuesta1
Si un script no funciona como espera, una de las primeras cosas que puede intentar es agregarlo set -x
antes del punto problemático en el código (en este caso, antes de grep
) y ejecutar el script. Luego verás cuál es el guión.de hechohaciendo, para que puedas comparar eso con lo queesperarque estar haciendo.
En su caso, el problema puede ser que _
sea un carácter válido en los nombres de las variables, por lo que está intentando utilizar el valor de $string1_from_
en lugar de $string1
como esperaba. Es por eso que es una buena práctica, incluso si no se utilizan manipulaciones sofisticadas, encerrar los nombres de las variables entre llaves. Por ejemplo:
if grep -q "dicounter_${string1}_from_${string2}" MasterFile.txt; then
echo "dicounter_${string1}_from${string2} already exists in MasterFile."
else
[..]