Usando grep en una instrucción if-else [cerrado]

10

Por qué mi código no se muestra si una cadena ingresada no está en el archivo. Cuando ingreso una cadena y no está en el archivo, no hay respuesta, vuelve al principio. ¿Alguien puede decirme qué le pasa a mi código?

while :
do
echo "Please enter a string"
read input_string
echo "Please enter the file name too see if that string is present in it - (Enter .abw after)"
read input_string1
if grep -q $input_string $input_string1 ; then
echo  "Your string has been found"
fi
done
Adam Poyser
fuente
3
¿Qué esperas que pase?
Patrick
Estaba destinado a decir que una cadena que ingresas, la busca en el archivo y dice si esa cadena está presente. Ahora me he dado cuenta de que necesito ingresar otro bit de código para otra cosa. Gracias
Adam Poyser
input_stringno es realmente un nombre variable de habla, por cierto :)
Marian
1
Necesita comillas dobles alrededor de expansiones variables. Leer ¿Por qué mi script de shell se ahoga en espacios en blanco u otros caracteres especiales?
Gilles 'SO- deja de ser malvado'

Respuestas:

10
while :
 do
     echo "Please enter a string"
     read input_string
     echo "Please enter the file name too see if that string is present in it - (Enter .abw after)"
     read input_string1
     grep -q "${input_string}" "${input_string1}"                                                                 
     if [ $? -eq 0 ] ; then
         echo  "Your string has been found"
     else 
         echo "Your string has not been found"
     fi
 done
GMaster
fuente
1
¡Acabo de probar este código y funciona, gracias! No me di cuenta de que todo mi problema era no tener una declaración else. Gracias por la rápida respuesta
Adam Poyser
2
Necesita citar los parámetros grep. Piense qué sucedería si mi cadena de búsqueda incluye -v, o si hay espacios en el nombre del archivo.
Ángel
0

Descubriste tu otra rama perdida, pero una sugerencia:

en lugar de usar $input_string $input_string1intente ${input_string} ${input_string1}solo para asegurarse de que no le $input_stringsiga 1.

user85015
fuente
No, su reemplazo propuesto es exactamente equivalente al original. $input_string1es el valor de la variable input_string1(dividida y globalizada, ya que no se cita), no involucra la variable input_string.
Gilles 'SO- deja de ser malvado'