sábado, 30 de diciembre de 2017
BASH - Usando Functions, IF, CASE, FOR
Vamos a probar como hacer un Script poniendo a prueba condicionales y ciclos , estos contenidos dentro de Funciones.
Se irá comentando con # las instrucciones del codigo, para que se pueda copiar y pegar directamente
[usermacizo@centos ~]# vim tuscript.sh
#-- Inicio del codigo
#!/bin/bash
## Este es un carrier que porta mis saltos de linea cuando no puedo poner un \n normal, por ejemplo se ve en los read -p .
cr=$(echo $'\n.')
cr=${cr%.}
## En estas entradas (STDIN) consigo settear las variables nI = Numero Inicial, nF = Numero Final.
## y orden = En que direccion hará la cuenta de numeros.
read -p "Ingrese un numero inicial$cr: " nI
read -p "Ingrese un numero final$cr: " nF
read -p "Desea contar hacia [A]tras o hacia [E]frente$cr: " orden
echo $cr
forma="Hacia Adelante"
## Funcion para ejecutar operacion.
# Aqui se valida usando la funcion define que tipo de incremental hará (hacia atras o hacia enfrente)
# tambien se settean unas variables como el tipo de incremental que irá en el ciclo (este cambia si en la funcion validar no tiene logica) , el operando que depende tambien de la funcion validar.
function contarnumeros{
incremental="++";
operando="<=";
define
if [[ $var -eq 1 ]]
# Tomar en cuenta que aquí no hay un "return" en la función, excepto los estandares (0=success, no zero = fallo) , entonces la variable $var ya trae un valor .
then
incremental="--";
fi
echo "======================================================================================="
echo "Se comenzara en el número [$nI] y se terminará en el [$nF] , haciendolo de forma ["$incremental"]$forma $cr"
echo "<==========>"
## Notar que para definir el ciclo, se complementa con las variables operando e incremental que son ajustados en las funciones define y validar
for (( cC=$nI;cC$operando$nF;cC$incremental))
do
echo "Imprimiendo número:" $cC
done
}
function define {
## En esta función se verifica con un case que la primera letra defina el orden, es decir si recibe
# la palabra "Atras" o "Enfrente" y en base a eso settear la variable "var" que será usada posteriormente.
# Tambien se asigna la variable forma para darle "verbosidad" al echo que aparece al final de la funcion contarnumeros
var=0
if [ ! -z $orden ]
then
case $orden in
[aA]*)
var=1;
forma="Hacia Atras"
;;
[Ee]*)
var=0
forma="Hacia Adelante"
;;
*)
var=0;
esac
validar var
fi
}
function validar {
##Aqui lo que se realiza es verificar que tenga logica que el numero inicial (nI) y el orden , es decir
# Si el orden es inverso, tiene que ser mayor el numero inicial al final, y de no ser así resettear las
# variables en el orden correcto.
# Esto se evalua tomando en cuenta la variable var setteada en la funcion define (donde 0 es hacia enfrente y 1 es hacia atras)
if [[ $var -eq 0 ]]
then
if [[ $nI -gt $nF ]]
then
nT=$nI
nI=$nF
nF=$nT
fi
else
if [[ $nF -gt $nI ]]
then
nT=$nI
nI=$nF
nF=$nT
fi
operando=">=";
fi
}
## Ejecutar todo el tamal que se declaró anteriormente (Desde la función contarnumeros se llaman las funcs define y validar
contarnumeros $orden $nI $nF
#-- Fin del codigo
[usermacizo@centos ~]# sh tuscript.sh
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario