Función Return En Shell Bash


Objetivo: 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
Objetivo: 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.

Perfil MP  
Objetivo: 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

Objetivo: 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.

Perfil MP  
Objetivo: 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


Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.2029s (PHP: -39% SQL: 139%)
Consultas SQL: 30 - Debug off - GZIP Activado