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


Responder a