Portal    Foro    Buscar    FAQ    Registrarse    Conectarse

Función Return En Shell Bash

Función Return En Shell Bash
Artículo
Responder citando    Descargar mensaje  
Mensaje Función Return En Shell Bash 
 
Buenas!.

Estoy probando a crear una función que me devuelva un resultado.
No estoy acostumbrado y no se parece a la mayoría de los lenguajes.

Supongamos que quiero sumar dos números, es solo un ejemplo.
Lo habría hecho así, pero no funciona.

#!/bin/bash

function suma(){
valor=$(($1 + $2))
return $valor
}

resultado=$(suma $1 $2)
echo "El resultado es $resultado"
 


Mostrando tan solo: "El resultado es "
Para que funcione tuve que hacerlo de la siguiente forma:

#!/bin/bash

function suma(){
valor=$(($1 + $2))
return $valor
}

suma $1 $2
echo "El resultado es $?"
 


$? muestra el valor del último comando.

¿ Sabe alguien el motivo por el cual no se puede hacer de la primera forma ?
¿ Una variable local, global, entrada, salida ?.

La llamo así:
./EjemploSumar_nofunciona.sh 3 4
 


Naturalmente puedo almacenar el valor del último comando $? en una variable. variable=$?  
Y podía haber quedado así:

#!/bin/bash

function suma(){
valor=$(($1 + $2))
return $valor
}

suma $1 $2
# asignar el resultado a una variable
valor=$?
echo "El resultado es $valor"
 


Sin abreviar el código, claro, ya que probablemente podamos devolver directamente el valor de la operación sin asignar a una variable.

El cuerpo de la función hubiera sido:

function suma(){
# valor=$(($1 + $2))
return $(($1 + $2))
}
 


Saludos



 
última edición por Shell el Viernes, 02 Noviembre 2018, 14:47; editado 1 vez 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Viernes, 02 Noviembre 2018, 14:41 ]
 


Función Return En Shell Bash
Comentarios
Responder citando    Descargar mensaje  
Mensaje Re: Función Return En Shell Bash 
 
Que tal así?

#!/bin/bash

echo -n "Por favor ingrese el primer número: "
read number1
echo -n "Por favor ingrese el segundo número: "
read number2

sum=$((number1 + number2))
echo "La suma de $number1 y $number2 es $sum."


Saludos.



 
tincho - Ver perfil del usuario Enviar mensaje privado  
tincho [ Lunes, 05 Noviembre 2018, 03:22 ]
Responder citando    Descargar mensaje  
Mensaje Re: Función Return En Shell Bash 
 
Hola Tincho.

Citar:

Que tal así?


Lo de sumar tan solo era un ejemplo.  
Me interesaba más el tema de un valor devuelto por una función.

Si el lenguaje funciona de una forma, no lo vamos a cambiar. Si el trabaja así.  

La idea en si es que estoy ejecutando un script que necesita llamar a una función que le devuelve una respuesta
y según esta, el script toma un camino u otro.

Mi idea era saber si de una lista de paquetes que le voy pasando a la función, este, está instalado o no.
Comencé con esta función:

#!/bin/bash

function existe(){
cuenta=$(dpkg --get-selections | grep -wc $1)
# Si el valor de la variable es mayor o igual a uno..
if [ $cuenta -ge 1 ]; then
    # Si el paquete está instalado
    echo "El paquete $1 está instalado"
else
    # Si el paquete no está instalado
    echo "El paquete $1 no está instalado"
fi
}

existe $1
 


Si queremos saber si Gambas3 está instalado:

./ExistePaquete.sh gambas3
 


Devolviendo la frase según condición.

Ahora bien si estoy comprobando una lista de paquetes podíamos querer que según el valor devuelto,
este instalado: 1, o no: 0

#!/bin/bash

function existe(){
cuenta=$(dpkg --get-selections | grep -wc $1)
# Si el valor de la variable es mayor o igual a uno..
if [ $cuenta -ge 1 ]; then
    # En caso positivo devolvemos 1
    return 1
else
    # En caso contrario devolvemos 0
    return 0
fi
}

# Llamamos a la función pasando el nombre del paquete
existe $1
# Mostramos 1 o 0 en según elcaso
echo $?
 


Con eso tomaríamos la decisión de que el paquete se ha instalado y no vamos a intentar instalarlo de nuevo,
en caso contrario lo instalaríamos. Es otra función.

¿ Y por qué todo esto ?.  Bueeeno, eso es algo que os tengo que comentar en otro mensaje. Continuara....

Saludos



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Lunes, 05 Noviembre 2018, 19:51 ]
Responder citando    Descargar mensaje  
Mensaje Re: Función Return En Shell Bash 
 
Ok, comprendo lo que intentas hacer, un script para reinstalaciones no?
Yo con el tiempo voy tuneando uno para reinstalar que de vez en cuando le voy haciendo mejoras.
Respecto a instalar o no un paquete (si es que ya lo esta) en el caso de apt el paquete no se reinstala y da un aviso como el siguiente
gambas3 ya está en su versión más reciente....
Así que la conclusion es que para los paquetes pongas dentro del script directamente algo como
sudo apt-get install -y paquete1
sudo apt-get install -y paquete2
...
sudo apt-get install -y paqueteN


Y para el caso que planteas yo verifico si la instancia de instalacion se realiza subre una maquina virtual o real para instalar o no virtualbox por ejemplo.
# Determinacion del tipo de maquina
SYSVIRT=`dmesg | grep "Hypervisor detected"`
if [ -n $SYSVIRT ];then
SYSVIRT="HARD"
else
SYSVIRT="VIRT"
fi

# Instalación de visualización en caso de tratarse de una maquina física
case $SYSVIRT in
        "HARD")
    sudo apt-get install -y virtualbox
esac


Ya nos contaras tu proyecto

Saludos.



 
tincho - Ver perfil del usuario Enviar mensaje privado  
tincho [ Lunes, 05 Noviembre 2018, 20:10 ]
Responder citando    Descargar mensaje  
Mensaje Re: Función Return En Shell Bash 
 
Tincho:

Citar:

Ok, comprendo lo que intentas hacer, un script para reinstalaciones no?


Eso es. Desde que Shordi estuvo comentando esto, me pareció bastante interesante su idea.
La forma de como instalar las aplicaciones cada vez que se crea una instalación nueva del sistema.

Estuve intentando ver la opción "y" de apt y me ha surgido una duda sobre el manual de linux ( man ).
Lo comento en otro mensaje.

Saludos



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Martes, 06 Noviembre 2018, 12:07 ]
Mostrar mensajes anteriores:    
 
Publicar nuevo tema  Responder al tema  Página 1 de 1
 
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 



 

cron