El libre pensamiento para un internet libre

No estas registrado.  

Anuncio

nord_600_250

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

kcdtv
Administrator

Registrado: 14-11-2014
Mensajes: 5,701

[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

nord_600_250

Temas similares

Tema Respuestas Vistas Ultimo mensaje
26 7600 15-03-2023 16:57:32 por kcdtv
Pegado:
34 3711 12-03-2023 18:24:22 por Guybrush92
Pegado:
Pegado:: Script multiuso wifi para Kali y otras distros por v1s1t0r  [ 1 2 3 18 ]
436 63242 07-03-2023 12:35:27 por kcdtv
0 389 23-02-2023 17:09:39 por kcdtv
Pegado:
114 258215 19-02-2023 17:36:14 por chuchof

Pie de página

Información del usuario

Ultimo usuario registrado: trdmexico
Usuarios registrados conectados: 0
Invitados conectados: 21

Estadisticas de los foros

Número total de usuarios registrados: 2,431
Número total de temas: 1,632
Número total de mensajes: 15,528

Máx. usuarios conectados: 373 el 30-09-2019 15:04:36