Linux/Unix Shell Scripting - ¿Alguien me puede ayudar a entender este código?

 
Vista:

¿Alguien me puede ayudar a entender este código?

Publicado por Jesus Ruiz (4 intervenciones) el 12/04/2019 22:36:35
Tengo un ejercicio que me dice que explique que hace este código:

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
 
for i in `sort $1`
do
     if grep $2 $i > /dev/null
     then
          echo A
          cp $i /tmp
          exit
     fi
done
 
echo B
Llevo varias horas dándole vueltas y no logro entenderlo bien, lo he ejecutado y a veces imprime "A" por lo que a veces entra en el if pero se me escapa.

Lo que mas o menos entiendo es que le pasas 2 parámetros, y se hace un for que en i guarda cada iteración del primer parámetro, por lo que supongo que el primer parámetro sería un archivo y que en i se guarda cada línea del mismo.

Después, mediante grep se busca el segundo parámetro en el archivo y la salida se redirige a /dev/null si la búsqueda existe entra en el if, imprime A y copia esa línea en el dir /tmp y al final imprime "B"

Lo que no entiendo es porque entonces si le paso un archivo que contiene las palabras "hola" y "adios" y de segundo parámetro le paso hola no funciona, me dice: "grep: hola: No existe el archivo o el directorio"

En un intento conseguí entrar al if poniendo como primer parámetro hola y como segundo parámetro también hola, pero no se ha vuelto a repetir.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de barna_rasta
Val: 38
Ha mantenido su posición en Linux/Unix Shell Scripting (en relación al último mes)
Gráfica de Linux/Unix Shell Scripting

¿Alguien me puede ayudar a entender este código?

Publicado por barna_rasta (42 intervenciones) el 13/04/2019 00:25:48
Hola Jesus,

prueba con:

1
if grep  $2 $1 > /dev/null
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Alguien me puede ayudar a entender este código?

Publicado por Jesus Ruiz (4 intervenciones) el 13/04/2019 00:53:10
Hola, he probado y ahora al ejecutar me imprime A pero me dice el siguiente mensaje
cp: no se puede efectuar `stat' sobre 'hola': No existe el archivo o el directorio
(El primer parametro es archivo1.txt y el segundo hola)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Alguien me puede ayudar a entender este código?

Publicado por Tom (332 intervenciones) el 13/04/2019 09:39:40
¿ Has pensado en leerte el man de los comandos que usa (sort, grep, cp) ?
El script recibe como parámetros:
- el nombre de un fichero que contiene a su vez una lista de nombres de ficheros
- una palabra clave.
Por cada fichero fichero contenido en la lista, si contiene la palabra clave se copia (el fichero) a /tmp
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar