uso de subrutinas en bash ?

Imagen de tenchi
0 puntos

Buenos dias

me lian las subrutinas y la pregunta que me inquieta es
como le hago para desde una subrutina() me lea $1 $2 $3
y de la misma manera para leer la salida de la sub rutina dentro del scrip

ssalida=`subrutina()`

____________________________________________________

Imagen de tenchi
+1
0
-1

bueno si yo hago un prueba.sh
----------------
#!/bin/bash

sub1() {
echo $1
}

sub1
----------------

[tenchi@PANDEMONIUM-DESKTOP ~]$ ./prueba.sh cualquiercosa

No me devuelve nada en lo absoluto la subrutina no es capas de leer lo que esta en $1 "cualquiercosa"

nesecito que la subrutina sea capaz de leer los atributos que le estoy pasando al scrip
como le hago como se declara la sub para poder hacerlo ??

+1
0
-1

.El hombre ,en lugar de admitir que había muchas cosas en la naturaleza que no podían explicarse con los conocimientos de su época optá por la solución más socorrida en toda la historia: se inventa una explicación ad hoc.

Esta es quizá una de

Imagen de joseluis
+1
0
-1

Tienes que pasarle los parámetros a la función.
Por ejemplo:

#!/bin/bash

sub1() {
  echo "sub1 ha recibido $# parametros"
  echo $1
  echo $2
  echo $3
}

echo "El script ha recibido $# parametros"
hora=`date +%H`
sub1 $1 ${hora} $2

Si lo ejecutas, con por ejemplo:

 ./prueba.sh uno dos

verás que te muestra:


El script ha recibido 2 parametros
sub1 ha recibido 3 parametros
uno
18
dos

bueno, en lugar de 18 te saldrá la hora en que lo ejecutas.

+1
0
-1

Imagen de joseluis
+1
0
-1

Otra cosa, si además quieres que la función te devuelva un valor (siempre que sea numérico) lo puedes hacer con return en la función y con $? para recogerlo. Por ejemplo en el ejemplo anterior:

#!/bin/bash

sub1() {
  echo "sub1 ha recibido $# parametros"
  echo $1
  echo $2
  echo $3
  return $((1+$2)) 
}

echo "El script ha recibido $# parametros"
hora=`date +%H`
sub1 $1 ${hora} $2
retorno=$?
echo ${retorno}

la función devuelve la hora recibida más uno, y el llamante recoge el valor con $?

+1
0
-1

Imagen de joseluis
+1
0
-1

Y ya por último, si quieres devolver un texto en una función lo puedes hacer con echo dentro de la función y la llamada a la función la haces con $

#!/bin/bash

sub1() {
  echo "sub1 ha recibido $# parametros"
  echo $1
  echo $2
  echo $3
  return $((1+$2)) 
}

sub2() {
  ret="sub2 ha recibido $1 $2 y $3"
  echo "$ret"
}

echo "El script ha recibido $# parametros"
hora=`date +%H`
sub1 $1 ${hora} $2
retorno=$?
echo ${retorno}

retorno=$(sub2 $1 ${hora} $2)
echo "Retorno: $retorno."

+1
0
-1