Funciones en shellscript

Hola a todos, hoy os voy a explicar como utilizar las funciones en shellscript.

Las funciones nos permiten ejecutar un código cuando se llame desde cualquier parte de nuestro script.

La forma de hacer una función es la siguiente:


#!/bin/bash

nombre_funcion(){
        # codigo
}


Veamos un ejemplo:


#!/bin/bash

holaMundo(){
        echo "Hola mundo"
}

Si esto lo ejecutamos, esto no mostrará nada, ¿porque? Por qué solo hemos declarado la función y no la hemos llamado. Para hacer que funcione

#!/bin/bash

holaMundo(){
        echo "Hola mundo"
}

holaMundo

Este es el resultado:

¿Cómo le pasamos parámetros a nuestra función? Igual que hacemos con los parámetros al llamar nuestro script. Os dejo un tutorial donde hablo sobre esos parámetros.

Recoger parámetros en ShellScript

Pues con una función haríamos lo mismo, veamos un ejemplo:


#!/bin/bash

suma(){
        resultado=$(($1+$2))
        echo "La suma de $1 y $2 es igual a $resultado"
}

suma 10 5


Como vemos con suma 10 5, le pasamos esos parámetros que los recogemos con $1 y $2.

Pero, ¿y si queremos devolver el valor de la suma en lugar de mostrar un mensaje? Lo haremos con $? que nos devuelve el ultimo valor retornado.


#!/bin/bash

suma(){
        resultado=$(($1+$2))
        return $resultado
}

suma 10 5
echo $?

Este es el resultado:

También tenemos que tener en cuenta que las variables son todas globales, es decir que desde fuera de la función puedo acceder al valor de la variable de la función.

#!/bin/bash

suma(){
        resultado=$(($1+$2))
        return $resultado
}

suma 10 5
echo $?
echo $resultado

Este es el resultado:

La forma de solucionarlo es de:


#!/bin/bash

suma(){
        local resultado=$(($1+$2))
        return $resultado
}

suma 10 5
echo $?
echo $resultado

Este es el resultado (resultado no existiría):

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Etiquetas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *