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

No hay comentarios:

Publicar un comentario