Esta ya es la penúltima parte de nuestros tutoriales de bash :(,pero en esta ocasión aprenderemos algo muy funcional ya que su mismo nombre lo dice funciones, también aprenderemos sobre las bibliotecas de rutinas ya que guardan algunos datos que los podemos consultar cada vez que queramos pero sin volver a escribir lo que seria la biblioteca de la rutina o función.
En distintos lenguajes de programación que he aprendido me han ayudado bastante las funciones y en bash no es la excepción.
Primero que nada la sintaxis de nuestra funcion en bash es asi
function nombre_de_la_funcion ()
{
bibliotaca de comandos
}
Algo de lo que se pueden haber dado cuenta es que no es lo mismo una rutina y una funcion,ya que en las rutinas esta es la sintaxis
nombre_de_la_rutina ()
{
bibliotaca de comandos
}
Cual es la diferencia,bueno vamos a darles un repaso y ustedes mismos lo veran
Funciones
Vamos a comenzar por lo básico pero aun así a estas alturas de los tutoriales ya debes saber que es un bucle y su sintaxis,bueno si no es así date una vuelta por los tutoriales pasados
Parte 1
Parte 2
Parte 3
Parte 4
Parte 5
Parte 6
Parte 7
Parte 8
Bueno para nuestro ejemplo vamos a usar el bucle while y una funcion
1.Definimos una función
#!/bin/bash
function ejemplo ()
{
echo Datos de hoy `date`
}
2.La llamamos
ejemplo
3.Listo ahora vemos el ejemplo
#!/bin/bash
function ejemplo ()
{
echo Datos de hoy `date`
}
ejemplo
Lo ejecutamos
¿Que imprime en la terminal?
Este comando
echo Datos de hoy `date`
¿porque?
Quen sabe,no no es cierto lo imprime porque esta adentro de nuesta funcion de ejemplo y lo llamamos con
ejemplo
Como pueden darse cuenta para llamar la funcion no necesitamos asignale un valor,por ejemplo $
$ejemplo
Pero de hecho si lo ejecutamos así
#!/bin/bash
function ejemplo ()
{
echo Datos de hoy `date`
}
$ejemplo
No da error, pero no imprime nada
¿Por que?
Porque la función no la toma en cuenta porque no es llamada y aunque $ejemplo valga algo,el valor es nulo (0) y tampoco se imprime en la pantalla y esto hace que se ejecute con un valor de 0
Ahora veamos el bucle while
#!/bin/bash
clear
vp=0
function ejemplo ()
{
echo "Numero principal"
}
while [ $vp -le 10 ]; do
ejemplo
echo "$vp"
(( vp=$vp+1 ))
sleep 1;
done
clear
ejemplo
echo $vp
Ejecuten,vean lo que hace
Después vean la explicación
#!/bin/bash
clear # Limpiamos la consola
vp=0 # variable principal vale 0
function ejemplo () # Definimos funcion
{
echo "Numero principal" # En la biblioteca solo se encutra esto
}
while [ $vp -le 10 ]; do # Iniciamos bucle si la variable principal vale meno de 10
ejemplo # Llamamos la funcion ejemplo
echo "$vp" # llamamos la variable principal
(( vp=$vp+1 )) # hacemos operacion aritmetica en la variable principal
sleep 1; # esperamos 1 segundo y repetimos el bucle hasta que se rompa
done
clear
ejemplo # llamamos la funcion ejemplo de nuevo
echo $vp # llamamos la variable principal de nuevo
¿Y esto para que sirve?
Bueno puede que ya te hayas dado cuenta,sirve para no definir nuevamente una serie de comandos o comando al solo llamar la función con el nombre de la misma.
Por ejemplo lo anterior pero sin funciones seria asi
#!/bin/bash
clear
vp=1
while [[ $vp = 1 ]] ; do
echo "Numero principal"
echo $vp
sleep 3;
vp=2
done
echo "Numero principal"
echo $vp
¿Lo veo mas simple?
Es porque lo es,las funciones sirven si almacenan una biblioteca muy grande de ordenes y en este caso solo era el comando echo.
Vamos a ver algo útil.
Vamos a crear una funcion de error
Esta seria
function error ()
{
echo "Error inesperado"
sleep 1;
echo "Saliendo..."
sleep 2;
exit 1;
}
Bueno los comandos de la biblioteca de la funcion de arriba no hace falta explicarlos
Ahora vamos a añadirlos a un script,pero ahora vamos a usar la estructura selectiva if
Enlace
A lo que hace el código no le pongan mucha atención solo es un ejemplo que se me ocurrió ya que se puede usar lo que sea parte del shell scripting,lo importante aquí es que en la parte
if [ $pass = $passd ] ; then
echo "Bienvenido"
else
error # Aqui se llama
fi
Se llama la funcion de error que creamos
Y también en la parte
case $selection in
1)
ls
;;
2)
pwd
;;
3)
netstat
;;
*)
error # Aqui se llama otra vez
;;
esac
La llamamos y ejecuta lo mismo!!!
Pero sin definirla de nuevo, porque vean como seria este script sin usar funciones
#!/bin/bash
# Principal
#------------------
passd="password"
echo "Hola $LOGNAME"
echo "Escribe tu contraseña"
read pass
if [ $pass = $passd ] ; then
echo "Bienvenido"
else
echo "Error inesperado"
sleep 1;
echo "Saliendo..."
sleep 2;
exit 1;
fi
sleep 1;
clear
echo "Que decea hacer"
echo "1)Listar su contenido"
echo "2)Ver donde esta"
echo "3)Ver su estado se red"
read selection
case $selection in
1)
ls
;;
2)
pwd
;;
3)
netstat
;;
*)
echo "Error inesperado"
sleep 1;
echo "Saliendo..."
sleep 2;
exit 1;
;;
esac
#--------------
# Final
Rutinas
Bien una rutina es un poco diferente y de hecho no se si sea lo mismo y solo es que las personas lo llaman distinto,bueno veamos su sintaxis en un ejemplo y vamos a usarla diferente para ver un poco de diferencia
#!/bin/bash
fecha ()
{
echo "La fecha de hoy `date`"
}
vp=`fecha`
echo $vp
Como podemos ver en el ejemplo anterior le pasamos los comandos de una rutina a una variable, esta es una cualidad que tienes las rutinas,podemos definir su contenido y luego llamarlo definiendo su valor en una variable o tambien igual que una función
Ejemplo
#!/bin/bash
fecha ()
{
echo "La fecha de hoy `date`"
}
fecha
O como vimos antes,pasarle su valor a una variable y despues llamarla
#!/bin/bash
fecha ()
{
echo "La fecha de hoy `date`"
}
vp=`fecha`
echo $vp
Bueno, también existe un uso mas avanzado de rutinas que veremos a continuación pero primero,como definir variables en una rutina
Las variables que estén adentro de una rutina
rutina ()
{
Aqui
}
se consideran globales por lo cual serán vistas en todo el script pero tambien podemos definir variables locales con el comando typeset
Por ejemplo si no hacemos un script muy grande se puede leer de manera global como en este ejemplo:
#!/bin/bash
hola (){
hola="Hola Mundo"
echo $hola
}
hola="Hola"
hola
echo $hola
Pero si queremos definir una variable local,podemos hacer uso del comando typeset
Por ejemplo
#!/bin/bash
hola ()
{
typeset hola
hola="Hola Mundo"
echo $hola
}
hola
Ahora si vamos a ver el uso avanzado de esto,con el uso avanzado de variables en este caso:
$1..$3..$9
Por ejemplo
#!/bin/bash
ejemplo ()
{
typeset num
(( num = $1 + $2 ))
echo La suma es : $num
return $num
}
ejemplo 10 10
Ejecuten y vean lo que hace
Aquí no voy a explicar porque es dificil(de explicar) solo pondré unos ejemplos para que vean como funcionan
Ejemplo 1
#!/bin/bash
ejemplo ()
{
echo "Hola $1"
}
ejemplo $LOGNAME
Ejemplo 2
#!/bin/bash
hola ()
{
echo $1
}
hola "Hola Mundo" "ñ_ñ"
hola "Hola otra vez" ":D"
hola "Hola de nuevo" ":P"
hola "De nuevo" ":)"
hola "Ya me aburri" ":/"
Ejemplo 3
#!/bin/bash
hola ()
{
echo $2
}
hola "Hola Mundo" "ñ_ñ"
hola "Hola otra vez" ":D"
hola "Hola de nuevo :P"
hola "De nuevo ñ_ñ"
hola "Ya me aburri :/"
Ejemplo 3
#!/bin/bash
hola ()
{
echo $1 $2
}
hola "Hola Mundo" "ñ_ñ"
hola "Hola otra vez" ":D"
hola "Hola de nuevo" ":P"
hola "De nuevo" ":)"
hola "Ya me aburri" ":/"
Bueno eso es todo en este tutorial en el próximo tutorial(el ultimo) veremos GUI basica
No hay comentarios.:
Publicar un comentario
Los comentarios serán revisados antes de ser publicados.