InicioLinuxCrea tus propios scripts parte II

Crea tus propios scripts parte II

Linux5/18/2012
He aquí la segunda entrada, un poco corta y sin contenido cómico para distraer (En esta entrada no hay zombies :-( ).



Bucles
Los bucles permiten ejecutar un trozo de código una o más veces dependiendo de si se cumple o no una condición.

.: While :.
Permite ejecutar un trozo de código mientras una condición se cumpla, y sólo se detiene cuando dicha condición es falsa, o también, cuando dentro del mismo trozo de código que se está ejecutando por medio de while hay alguna interrupción.
(En lenguaje humano → Mientras que tal cosa sea cierta, repita...)

    CONTADOR=1
    #mientras el valor de la variable llamada CONTADOR sea menor a 5 haga:
    while [ $CONTADOR -le 5 ]; do
       echo "CONTADOR es igual a $CONTADOR"
       CONTADOR=$(( $CONTADOR + 1 ))
    done


-le es un comparador que significa menor, una de las entradas estará destinada a ese tipo de comparadores.

Ejemplo de salida:
CONTADOR es igual a 1
CONTADOR es igual a 2
CONTADOR es igual a 3
CONTADOR es igual a 4
CONTADOR es igual a 5

Ahora, supongamos que tenemos un archivo llamado ip_ping.lst con la siguiente lista de IPs a las que queremos hacer ping:

File: ip_ping.lst

173.194.37.69
173.194.37.70
173.194.37.71
69.171.242.11
66.220.149.11

La forma de hacer ping a cada dirección por medio de un while sería:

    #!/bin/sh
    while read direccion_ip; do
       echo "Haciendo ping a $direccion_ip"
       ping -c1 $direccion_ip
    done < ip_ping.lst


Otro ejemplo con más información en el archivo ip_ping.lst, el cual contendrá ahora la siguiente estructura:
ip del sitio a dar ping (espacio) nombre del sitio (espacio) bytes a enviar (espacio) numero de “ecos” a enviar. Ejemplo:

File: ip_ping.lst

173.194.37.69 google.com 64 1
173.194.37.70 google.com 128 5
173.194.37.71 google.com 64 2
69.171.242.11 facebook.com 64 3
66.220.149.11 facebook.com 64 4

En otra entrada veremos como cambiar el "espacio" por un caracter. La idea de poner más datos en el archivo es poder leer cada dato como una variable diferente:

    #!/bin/sh
    while read ip nombre size ecos; do
       echo "Haciendo ping al sitio $nombre"
       ping -c $ecos -z $size $ip
    done < ip_ping.lst


“ip nombre size ecos” son nombres de variables que decidí usar para cada palabra que se encuentre en el archivo ip_ping.lst



.: for :.
En bash scripting el bucle for se usa de manera un poco diferente a como se usa en C.
Para cada elemento de una lista de elementos repite la accion:


    #!/bin/bash
    #para cada elemento haga:
    for ELEMENTO in bra zil fw; do
       echo "$ELEMENTO blablabla"
    done


La salía seria:
bra blablabla
zil blablabla
fw blablabla

Ahora, supongamos que tenemos una carpeta llena de imágenes, y necesitamos cambiarles el tamaño (util cuando estan muy pesadas para enviar por mail):
    #!/bin/sh
    mkdir resized #Creamos un nuevo directorio donde quedaran las imagenes modificadas
    for img in `ls`; do
        mogrify -resize 800x600 -compress jpeg -quality 90 -path ./resized $img
    done


Ahora, cada ip del archivo ip_ping.lst ahora podría estar separado por espacios así:

File: ip_ping.lst
173.194.37.69 173.194.37.70 173.194.37.71 69.171.242.11 66.220.149.11

    #!/bin/sh
    for element in $(cat ip_ping.lst); do
       echo “Haciendo ping a $element”
       ping -c1 $element
    done




Funciones
Al igual que en la mayoria de lenguajes de programación, en bash es posible utilizar funciones. Una funcion es como tener otro script dentro del mismo script “principal”, esto evita tener que crear un archivo diferente para cada script, también es ideal cuando tenemos que repetir código, las funciones nos evitan tener que estar escribiendo el mismo código una y otra vez. En fin tienen muchas ventajas que se resumen en ahorro de tiempo, facilidad de leer, mantener y programar el script.

    #!/bin/bash
    function fn_salir() {
       clear
       exit
    }
    function fn_saludar() {
       echo "Hola mundo!"
    }

    fn_saludar
    fn_salir
    echo “esto nunca se mostrará...”


Con el anterior script se crean dos funciones, una llamda fn_saludar y otra llamda fn_salir. Finalmente se llama a cada una de las funciones: primero llamamos la funcion fn_saludar y luego la funcion fn_salir, por lo tanto la frase “esto nunca se mostrará...” nunca saldrá en pantalla.

Las funciones también se pueden declarar sin la palabra "function":

    #!/bin/bash
    fn_salir() {
       clear
       exit
    }
    fn_saludar() {
       echo "Hola mundo!"
    }


Ahora, un ejemplo con argumentos:

    #!/bin/bash
    #declaramos la funcion llamada sumar:
    function sumar(){
       resultado=$(( $1 + $2 ))
    }
    echo "Ingrese primer número"
    read num1
    echo "Ingrese el segundo número"
    read num2
    sumar $num1 $num2
    echo "el resultado es $resultado"
    exit


O lo que da lo mismo:
    #!/bin/bash
    function sumar(){
       echo "el resultado es $(( $1 + $2))"
    }

    echo "Ingrese primer número"
    read num1
    echo "Ingrese el segundo número"
    read num2
    sumar $num1 $num2
    exit


Cuando llamamos a la funcion sumar:
    sumar $num1 $num2

también le estamos pasando los valores de $num1 y $num2, la funcion leerá el primer argumento en este caso $num1 como $1 y el segundo argumento como $2

    resultado=$(( $1 + $2 ))

Ultimo ejemplo:
    #!/bin/bash
    function fn_ping(){
       ping -c1 $1
    }

    function fn_arping(){
       arping -c1 $1
    }

    function fn_menu(){
       echo ":::: Que desea hacer? ::::"
       echo -e "1. hacer pingn2. hacer arpingn3. Salir"
       read opcion
       case $opcion in
           1) fn_ping $ip;;
           2) fn_arping $ip;;
           3) exit;;
           *) echo "opcion no válida";;
       esac
       fn_menu
    }

    echo "Ingrese una ip para comenzar:"
    read ip
    fn_menu
Datos archivados del Taringa! original
99puntos
1,141visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
4visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

c
cadarive🇦🇷
Usuario
Puntos0
Posts12
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.