En esta ocasión les mostraré cómo hacer un script con condición en Bash, lo cual traducido es:
Simple la explicación noSi se cumple X cosa que ustedes deseen, se hace Y acción, si no se cumple entonces se hace otra acción.
Ahora, he pensado durante unos minutos
algún ejemplo para usar en este tutorial, se me ha ocurrido el siguiente
dilema/problema/situación:
Estamos en la red de nuestra empresa, y deseamos saber si X ordenador está conectado a la red. Para ello hacemos un script que hará ping hacia ese ordenador, y si está en red (o sea, si devuelve el ping) nos dirá que SÍ, está en red, de lo contrario (o sea, que no esté en red) nos dirá que NO está en red.
Una vez hecho esto, ahora les explicaré cómo hacer un ciclo con condiciones
Eh aquí el código:
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
No se preocupen, les explico esto al detalle
ping es el comando que
usaremos, y nos dirá si esa PC está en red. Para decirle qué PC queremos
comprobar si está o no en red, debemos cambiar DIRECCION-IP por obviamente, la dirección IP de la PC que deseamos comprobar.
Como ven, puse “-c 1“,
lo cual nos es necesario. Cuando hacemos ping a un ordenador, esta
acción no se detiene (el ping) hasta que nosotros mismos presionemos [Ctrl]+[C], por lo que poniendo “-c 1”
le indicamos que haga solo una verificación (solo un intento de ping) y
ningún otro, esto hará que se detenga al instante, o sea… comprobará si
el ordenador está en red solo una vez.
Si tienen dudas con esto, sin pena… lo dicen y yo con MUCHO gusto se los explico de nuevo
Ahora viene el ciclo, pues lo que acabo de explicar no es más que un comando/acción normal
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Para que entiendan esto, les explicaré un detalle sumamente importante de Bash
Los más conocedores del tema me podrían
tildar de equivocado o algo así, pero bueno, esto lo escribo para lo
novatos o menos expertos, mientras ellos lo entiendan entonces genial
Sucede que como en Bash es algo así como 0 y 1, o sea, o estás vivo o estás muerto, cuando se ejecuta un comando o acción: O se ejecutó bien sin problemas (1), o hubo algún problema o error (0).
Nosotros efectuamos X acción o comando, y
esto que hicimos puede haberse efectuado bien o mal, puedo haber tenido
error o no, y aquí es donde está el detalle
Si lo que mandamos a hacer (en este caso: ping -c 1 DIRECCION-IP) no dió error y se efectuó bien, entonces devolverá el valor: 1 . En caso contrario, y que la acción (o sea, el ping) no fuese exitoso, devolverá valor 0.
Y finalmente, lo que significa el código anterior es esto:Si se devolvió valor 0 entonces
Pon en pantalla el texto: “No está en red”
De lo contrario (y que se devuelva NO 0, sino 1)
Pon en pantalla el texto: “Si está en red“
Esto que les acabo de explicar, nos
servirá en un futuro para muchísimas cosas, pues es realmente útil poder
decir que si X acción dió error, haga Y acción, y en caso de que X
acción no haya dado error, que haga Z acción.
Sé que a algunos podría liaros un poco,
por lo que he intentado explicarlo de varias formas diferentes,
intentando que todos lo entiendan de una vía u otra. En caso de que
alguien se quede con dudas, me lo hace saber.
Ahora, hagamos nuestro script
Debemos seguir los pasos de este tutorial: Bash: Cómo hacer un script ejecutable
Luego copiemos el siguiente código en ese archivo (script.sh), y al final pongamos “exit” (sin las comillas):
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Les debe quedar así (recuerden que deben haber cambiado DIRECCION-IP por la IP que desean):
Aquí pueden ver el script en ejecución:
Como ven, al final nos dice “Sí está en red”
Lo importante aquí es que en realidad
entiendan esto de las condiciones, por lo que les dejo otro código para
volver a explicarlo, pero desde otro punto de vista.
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
Lo que esto significa es simple, les dejo línea a línea la explicación:1ra línea: Lo que escribamos, ese será el valor de la variable “texto” (sin las comillas).2da línea: Comprueba si el contenido de la variable (lo que acabamos de escribir) es 3.3ra línea: En caso de ser 3, nos mostrará el texto “Correcto” (sin las comillas).4ta línea: De lo contrario (o sea, en caso de que no hayamos escribo 3).5ta línea: Nos mostrará el texto “Incorrecto” (sin las comillas).6ta línea: Fin de la condición.
Como han podido darse cuenta, si ponemos echo y seguidamente entre comillas dobles (“) un texto, esto hará que se muestre en la terminal ese texto. O sea, si ponemos:
echo "esto es una prueba"
Nos mostrará en la terminal el texto: esto es una prueba
Pero volviendo a este segundo ejemplo, les mostraré la utilidad (y ejecución) de este segundo script con algo MUY simple
… el típico “cuánto es 1 + 2?“
Les dejo el código del script completo:
#!/bin/bash
# -*- ENCODING: UTF-8 -*-
echo "¿Cuánto es 1 + 2?"
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
exit
Les dejo aquí cómo funciona el script:Y bueno… nada más que agregar.
Esto es algo elemental, simple sí, pero
aún así he intentado explicarlo lo mejor posible, pues no todos tienen
alma de programador, y muchas veces necesitamos hacer scripts como estos
(o similares), de cualquier forma espero que este artículo le sea de
utilidad a alguien
Cualquier duda o pregunta, queja o
sugerencia por favor, la dejan acá, con mucho gusto les respondo y así,
todos aprendemos un poco más
No hay comentarios:
Publicar un comentario