Foros del Web » Soporte técnico » Sistemas Operativos »

Shell Scripting: Funciones.

Estas en el tema de Shell Scripting: Funciones. en el foro de Sistemas Operativos en Foros del Web. No soportaba editar los scripts de los /etc/init.d de RedHat o Debian así que me puse manos a la obra con la primera parte de ...
  #1 (permalink)  
Antiguo 15/07/2002, 06:50
Avatar de lical
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: $PWD
Mensajes: 1.267
Antigüedad: 23 años, 6 meses
Puntos: 0
Shell Scripting: Funciones.

No soportaba editar los scripts de los /etc/init.d de RedHat o Debian así que me puse manos a la obra con la primera parte de shell scripting de RUTE. He ido ejecutando los ejemplos y comprendiéndolos, y mi objetivo está casi del todo conseguido, ya no hay script que no comprenda (incluidos los xinitrc de RedHat

Pero en el útlimo apartado de esa sección del libro habla de las funciones, y hay cosas que no me quedan claras. Por ejemplo:

Código:
 function factorial ()
{
        N=$1
        A=1
        while test $N -gt 0 ; do
                A=`expr $A '*' $N`
                N=`expr $N - 1`
        done

        echo $A
}
¿Es que puede tomar la definición de la función el $1 (primer argumento) directamente? Es que en PHP había que decirle que esa variable era global... No lo entiendo, porque si le añado debajo de la definición de la función una línea para que la ejecute:

Código:
 factorial
Y guardo todo en un shell script (factorial.sh), y ejecuto:

Código:
 $ ./factorial.sh 4
Me devuelve:

Código:
 ./factorial.sh: test: -gt: unary operator expected
1
Creo que no puede tomar el valor del primer argumento dentro de la función. ¿Puede alguien explicarme cómo funcionan las variables globales en el shell scripting?

Gracias por vuestro tiempo.


Un saludo,
  #2 (permalink)  
Antiguo 15/07/2002, 06:56
Avatar de lical
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: $PWD
Mensajes: 1.267
Antigüedad: 23 años, 6 meses
Puntos: 0
Re: Shell Scripting: Funciones.

Claro, ya lo entiendo :) (o casi

añadiendo la línea

Código:
 factorial $1
en lugar de
Código:
 factorial
.

Entonces... ¿la respuesta a mi pregunta es que $1 es global entonces? ¿No hay que declarar variables globales en la shell, todas lo son?


Un saludo,

<hr width=80% align=center>lical -> Usuario registrado de Linux #254225<br><br>¿Piensas que el software puede ser algo más?
[B]<a href="http://www.zonasiete.org/" target="_blank">www.zonasiete.org</a>
Acercando el proyecto GNU/Linux a todos.</b
  #3 (permalink)  
Antiguo 15/07/2002, 12:27
 
Fecha de Ingreso: noviembre-2001
Mensajes: 415
Antigüedad: 23 años, 8 meses
Puntos: 0
Re: Shell Scripting: Funciones.

todo lo contrario, el shell scripting tiene variables locales.

El PHP es el raro. Programo en Perl, C, Java, Pascal, Basic, PHP... conozco algo de assembler, tcl, python.... y el PHP es el UNICO lenguaje en la que en un ambiente local tenes que decir que tal variable es global para que lo tome como tal.

si tenes dudas sobre como funcionan las localidades de variables en shell scripting, aca te doy este ejemplo claro:
Código:
#!/bin/sh
A=&quot;A global&quot;;

bla () {
   local A=&quot;A local&quot;
   B=&quot;B global&quot;
   local B=&quot;B local&quot;;
   echo ---------------------
   echo Dentro de funcion bla
   echo ---------------------
   echo 1: $1
   echo A: $A
   echo B: $B
   echo ----------------------
   echo Saliendo de la funcion
   echo ----------------------
}

echo 1: $1
echo A: $A
echo B: $B
bla test
echo 1: $1
echo A: $A
echo B: $B
ejecutalo usando:
Código:
# sh script.sh parametro
  #4 (permalink)  
Antiguo 15/07/2002, 12:41
Avatar de lical
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: $PWD
Mensajes: 1.267
Antigüedad: 23 años, 6 meses
Puntos: 0
Re: Shell Scripting: Funciones.

Pues muchísimas gracias MMontes, ya lo he comprendido del todo.

Yo es que sólo he programado en PHP y entonces era el shell scripting el que me parecía raro :P

Pero ya está eso claro :) . He decido aprender a programar aunque sea despacito, ya está bien de decir maravillas del código abierto, va a haber que ir contribuyendo. Aunque primero hay que saber programar y en ello estoy, voy mirándolo en serio (después del shell scripting va el C


Un saludo,

<hr width=80% align=center>lical -> Usuario registrado de Linux #254225<br><br>¿Piensas que el software puede ser algo más?
[B]<a href="http://www.zonasiete.org/" target="_blank">www.zonasiete.org</a>
Acercando el proyecto GNU/Linux a todos.</b
  #5 (permalink)  
Antiguo 15/07/2002, 12:44
Avatar de lical
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: $PWD
Mensajes: 1.267
Antigüedad: 23 años, 6 meses
Puntos: 0
Re: Shell Scripting: Funciones.

Por cierto, observo que a una función de shell scripting se le pasan los argumentos igual que a un script en sí mismo, ¿me equivoco?


Un saludo,

<hr width=80% align=center>lical -> Usuario registrado de Linux #254225<br><br>¿Piensas que el software puede ser algo más?
[B]<a href="http://www.zonasiete.org/" target="_blank">www.zonasiete.org</a>
Acercando el proyecto GNU/Linux a todos.</b
  #6 (permalink)  
Antiguo 15/07/2002, 15:44
 
Fecha de Ingreso: noviembre-2001
Mensajes: 415
Antigüedad: 23 años, 8 meses
Puntos: 0
Re: Shell Scripting: Funciones.

correcto.

los parámetros de las funciones y de los &quot;programas&quot; son almacenados en las variables $1, $2, ..., $n del entorno local.
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 04:53.