Foros del Web » Administración de Sistemas » Unix / Linux »

Problema con programación scripts shell.

Estas en el tema de Problema con programación scripts shell. en el foro de Unix / Linux en Foros del Web. Tengo un problema bastante serio, estoy estudiando informática y la programación la llevo bastante bien, pero la parte de scripting de linux se me esta ...
  #1 (permalink)  
Antiguo 25/04/2012, 20:27
 
Fecha de Ingreso: diciembre-2011
Mensajes: 134
Antigüedad: 12 años, 4 meses
Puntos: 5
Problema con programación scripts shell.

Tengo un problema bastante serio, estoy estudiando informática y la programación la llevo bastante bien, pero la parte de scripting de linux se me esta quedando trabada hasta tal punto que en la segunda practica no se por donde salir. Espero que alguien pueda ayudarme.

El 1er ejercicio consistía en hacer un script que pudiese sustituir al comando find usando ls y grep.


#!/bin/bash
#
#
ls | grep -E -e $1

el escript es este, donde para aprobar teníamos que encontrar palabras que empezasen por una letra en concreto, que terminasen por una letra en concreto, que empezasen o acabasen por una letra y que empezasen y acabasen por una letra.


ok. ahora viene el problema, nos piden mejorar el ejercicio añadiendole los parametros de opcion de nombre de ficheros. que sino me confundo son el -name, -iname, -regrex. pero no tengo muy claro que hacen estos, ni tampoco tengo claro como hacerlo. solo se que se debe hacer con un case y con el cut porque el profesor nos lo ha dicho y nos ha dado parte del codigo que pongo aqui.


por una parte el case.


case $1
in
-name)
ls|grep -E $var;;

-iname)
ls|grep -E $var;;

-regrex)
ls|grep -E $var;;
esac



y por otra esto.

var=$(echo "$1" | cut -d"*" -f1 | wc -w);
if test $var -eq 0;
then
#var1="^"$(echo "$1" | cut -d"*" -f1)
var="^"$(echo "$1" | cut -d"*" -f2)
else
var=$(echo "$1" | cut -d"*" -f1)"$"
#var2=$(echo "$1" | cut -d"*" -f2)"$"
fi
echo $var




no se si me podréis ayudar , espero que si, pero estoy muy perdido.
  #2 (permalink)  
Antiguo 25/04/2012, 20:31
 
Fecha de Ingreso: abril-2011
Ubicación: Alicante
Mensajes: 52
Antigüedad: 13 años
Puntos: 3
Respuesta: Problema con programación scripts shell.

Dispara a tu profesor que es el mismo que el mio seguro jajajaa!
  #3 (permalink)  
Antiguo 25/04/2012, 20:43
 
Fecha de Ingreso: diciembre-2011
Mensajes: 134
Antigüedad: 12 años, 4 meses
Puntos: 5
Respuesta: Problema con programación scripts shell.

Cita:
Iniciado por capixi Ver Mensaje
Dispara a tu profesor que es el mismo que el mio seguro jajajaa!





si, por desgracia si .
  #4 (permalink)  
Antiguo 26/04/2012, 09:01
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con programación scripts shell.

Como has escrito que no sabés lo que hacen -name, -iname y -regex, empecemos por ahí.

-name acepta una expresión GLOB (no regex), y busca archivos cuyo nombre coincida con ella. Busca en internet las diferencias entre glob y regex.

-iname es igual que -name, salvo que no hace diferencias entre mayúsculas y minúsculas.

-regex es similar a -name excepto que aplica una expresión regular (regex, no GLOB) y la aplica a TODA la ruta, no solamente al nombre.

Si tu 'find' aplica una expresión regular vía grep a la salida de ls, -regex es trivial para implementar. Como el parámetro de -name es un glob, puede ser simplemente pasado como parámetro de ls (antes de pasar la salida a grep).

-iname es un poco más complicado, no se puede hacer con ls. Te sugiero que lo que te pasen como parámetro a -iname lo pases a "grep -i", sustituyendo de alguna manera los asteriscos (que grep no entenderá directamente)

Prueba y comenta lo que salga :)


Saludos.
  #5 (permalink)  
Antiguo 26/04/2012, 16:38
 
Fecha de Ingreso: diciembre-2011
Mensajes: 134
Antigüedad: 12 años, 4 meses
Puntos: 5
Respuesta: Problema con programación scripts shell.

Cita:
Iniciado por AlvaroG Ver Mensaje
Como has escrito que no sabés lo que hacen -name, -iname y -regex, empecemos por ahí.

-name acepta una expresión GLOB (no regex), y busca archivos cuyo nombre coincida con ella. Busca en internet las diferencias entre glob y regex.

-iname es igual que -name, salvo que no hace diferencias entre mayúsculas y minúsculas.

-regex es similar a -name excepto que aplica una expresión regular (regex, no GLOB) y la aplica a TODA la ruta, no solamente al nombre.

Si tu 'find' aplica una expresión regular vía grep a la salida de ls, -regex es trivial para implementar. Como el parámetro de -name es un glob, puede ser simplemente pasado como parámetro de ls (antes de pasar la salida a grep).

-iname es un poco más complicado, no se puede hacer con ls. Te sugiero que lo que te pasen como parámetro a -iname lo pases a "grep -i", sustituyendo de alguna manera los asteriscos (que grep no entenderá directamente)

Prueba y comenta lo que salga :)


Saludos.


Gracias, me ha sido de gran ayuda.

Etiquetas: linux, scripts
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:13.