[Bash] Funciones (Pagina 1) / Scripts y programación / Foro Wifi-libre.com

El libre pensamiento para un internet libre

No estas registrado.     

Anuncio

Wifi-highpower.es es distribuidor oficial de Alfa Network

#1 08-08-2015 21:23:24

kcdtv
Administrator

Registrado: 14-11-2014
Mensajes: 2,053

[Bash] Funciones

¿Que es una función? ¿Como redactarla? ¿Como ejecutarla? ¿A que sirve?

p_anonymous-function.png

La "función" en bash (y en lenguajes de programación)  es algo muy importante.
El uso de funciones es inevitable si nuestro script es algo largo así que no hay otra que entender como las funciones ... "funcionan" tongue
  Es muy fácil y permite hacer cosas muy complejas.

¿Que es una función?

  Una definición básica sería : "Una función es una secuencia de código."
Es decir varias lineas de código que juntamos en un bloque.
Esta secuencia se ve atribuir un nombre.
podremos así ejecutar la función invocando su nombre.
De cierto modo un función nos permite crear nuestros propios "comandos" personalizados.

  Nada mejor para entender algo que hacerlo así que vamos a redactar y emplear una función

¿Como redactar una función ?

Una función se compone de tres elementos :

  1. Un nombre

  2. Una instrucción de abertura y una instrucción de cierre

  3. Una secuencia de ordenes

  Lo primero que debemos hacer es darle un nombre.
Llamaremos la nuestra "FUNC"
Para que bash entienda que estamos definiendo una función debemos añadir después el nombre dos paréntesis; de este modo ()
Así que si quiero empezar a definir una función que se lama FUNC debo escribir

FUNC()

Luego tengo que poner la instrucción de abertura. marca el inicio de la secuencia de ordenes que queremos poner en nuestra función.
Se hace con el dígito  {

FUNC()
{

  Ahora toca poner la secuencia de ordenes que queremos ejecutar.
Por ejemplo nuestra función "FUNC" va a decir "estas son las interfaces detectadas por aircrack-ng" (comando "echo")  y ejecutar airmon-ng.

FUNC()
{
echo "
***** Esta son las interfaces detectadas por aircrack-ng *****
"
sudo airmon-ng

Y por fin cerramos la secuencia de ordenes y acabamos de declarar nuestra función con el símbolo } (la instrucción de cierre)
Aquí va nuestra función completa FUNC

FUNC()
{
echo "
***** Esta son las interfaces detectadas por aircrack-ng *****
"
sudo airmon-ng
}

func2.jpg

¿Como usar una función?

  Algo que puede parecer obvió pero que puede ser bueno recordar es que hay que definir una función antes de invocarla. 
Porque si no la defino obtendré en consola un mensaje de error "orden desconocida"

func3.jpg

  Entonces, una vez que hemos definido nuestra función  - con su nombre, las dos paréntesis , la instrucción de abertura, el código a ejecutar y la instrucción de cierre - solo tengo que invocarla para ejecutarla.
  Escribo su nombre (FUNC) y se ejecuta

func4.jpg

¿A que sirve?

  La primera "función" de la función es ahorrarnos código. Muchas veces cuando hacemos códigos largos hay secuencias que repetimos.
Declaramos una función con la secuencia repetida una sola vez en inicio de código y luego solo tendremos que entrar su nombre para ejecutarla.
Pero esto no es todo.
  Una cosa bastante chula de la función es que la podemos usarla de forma recursiva para hacer un bucle
Me explico con un ejemplo. Imaginamos que queremos hacer un script que nos devuelve el valor decimal de una cadena hexadecimal.
Podríamos hacer algo así, en dos liñas :

read -ep "Entrar la cadena hexadecimal a convertir " HEX

con read pedimos al usuario que entre el valor a convertir que guardamos en la variable "HEX"
Luego convertimos el valor de HEX a decimal y sale en consola:

printf "%d\n" 0x$HEX

  Tenemos a nuestro script.
Pregunta a mil € : ¿Como hacer un bucle?
Ahora si ejecuto mi script; puedo convertir una sola cadena y se parra.

func5.jpg

Lo que quiero es un bucle, para poder volver a convertir datos en lugar que se parre

  Para hacer un bucle voy a llamar la función ... a dentro de la función.
Declaro mi script de dos liñas como una función que llamo FUNC

FUNC()   
{
read -ep "Entrar la cadena hexadecimal a convertir " HEX
printf "%d\n" 0x$HEX
}

Y justo antes de cerrar la funcción llamo à la funcción.FUNC para volver a ejecutarla.
Así se ejecuta la función y justo antes de acabarse... vuelve a ejecutarse... nunca se parra el proceso y podemos convertir datos hasta el final de los tiempos.

FUNC()   
{
read -ep "Entrar la cadena hexadecimal a convertir " HEX
printf "%d\n" 0x$HEX
FUNC
}

func6.jpg

Este ultimo punto es a lo mejor un poco difícil de pillar... Pensar en lo que hace el código paso a paso, liña por liña.
Se van ejecutando las ordenes de la secuencia liña por liña
Y la ultima orden (que es "FUNC", es decir llamar la función) significa "volver a ejecutar la secuencia"
Entramos así en un bucle infinito,

  Hasta la próxima... wink

Desconectado

Anuncio

Wifi-libre.com: El libre pensamiento para un internet libre / Regístrese ahora

Temas similares

Tema Respuestas Vistas Ultimo mensaje
Hola! por Ike
1 5 Ayer 23:54:48 por kcdtv
RouterScan linux por juandiegomu
3 29 Ayer 22:06:44 por kcdtv
7 849 Ayer 17:35:28 por kcdtv
1 17 Ayer 11:25:21 por Koala
2 51 Ayer 02:07:10 por kcdtv

Pie de página

Información del usuario

Ultimo usuario registrado: Ike
Usuarios registrados conectados: 0
Invitados conectados: 3

Estadisticas de los foros

Número total de usuarios registrados: 356
Número total de temas: 616
Número total de mensajes: 4,220

Máx. usuarios conectados: 45 el 12-04-2016 12:02:20