RE: Una consulta sobre grep
On Thu, 2004-07-29 at 12:47, Carlos Iriondo wrote:
> Hola Cesar.
Carlos.
Estoy copiando de vuelta a la lista, para el archivo.
> No he conseguido hacer funcionar el script que me diste, porque no
> entiendo bien su funcionamiento.
Lee el manual builtins(7), especialmente el comando "read". Creo que
todo lo que hay que saber acerca de este script está documentado en esa
sección.
Si no estás a gusto con los manuales en inglés, instala
manpages-es-extra. Ahí vienen bash(1) y builtins(7) en español.
Otras referencias:
http://es.tldp.org/COMO-INSFLUG/COMOs/Bash-Prog-Intro-COMO/
http://www.demiurgo.org/doc/shell/shell.html
> Lo copie a un archivo que se llama prueba.sh tal como te muestro a
> continuacion.
[...]
> Pero no funciona me dice: ./prueba.sh: datos[0]: command not found
Curioso. Acabo de usar tu mensaje para recrear el script y el archivo
de datos, y funciona perfectamente en mi máquina. Parece que tu bash no
soportara arreglos, o algo así. ¿Qué versión estás usando?
Como sea, me hiciste leer el manual de nuevo, y darme cuenta de lo sucio
que es usar un arreglo para esto. Prueba mejor así:
------------------------------------------------------------------------
#! /bin/sh
while IFS=: read -r usuario nombre grupo home
do
echo "Usuario: [$usuario]"
echo "Nombre: [$nombre]"
echo "Grupo: [$grupo]"
echo "Home: [$home]"
done
------------------------------------------------------------------------
Hasta donde sé esto no contiene "bashismos", debería correr en cualquier
shell POSIX. Yo lo probé en bash, pdksh, ash y dash. Me sorprendería
mucho que tuvieras problemas con esto.
> Debe ser realmente trivial, pero no sé como se hace esto, como dije no
> conozco practicamente nada de scritp y menos aun bash, sed, etc. Aparte
> mi ingles no es muy bueno para entender la documentacion
------------------------------------------------------------------------
#! /bin/sh
if [ $# -ne 1 ] ; then
echo "Uso: $0 archivo" >&2
exit 1
fi
(while IFS=: read -r usuario nombre grupo home
do
echo "Usuario: [$usuario]"
echo "Nombre: [$nombre]"
echo "Grupo: [$grupo]"
echo "Home: [$home]"
done) < "$1"
------------------------------------------------------------------------
Tú dirás si es trivial o no. Alternativamente, puedes definir el while
dentro de una función, y llamar a la función redirigiendo su entrada.
Yo haría eso si hubiera mucho código dentro de ese while.
-CR
Reply to: