Introducción a bash -paso4- Condiciones "if-elif-else-fi"

[h]Introducción a bash : Paso 4[/h]

[h]Las condicionesif-esle-fi” y “if-elif-else-fi”[/h]

Hoy vemos las condiciones así que un poar de comandos más .
Las condiciones nos permiten inducir un comportamiento según unos criterios. Unos comandos se ejecutan bajo ciertas condiciones que definimos.
Vamos a ver enseguida concretamente como se redactan y a que pueden servir

Recordatorio de los dos capítulos anteriores:

  1. Lo que es bash (el interprete de ordenes de las distribuciones GNU-Linux)/*]
  2. Como redactar un script bash (un simple fichero de texto que se distingue por su primera liña, la famosa “bang-line!” : #!/bin/bash/*]
  3. Como ejecutar un script bash (nos situamos en el directorio con nuestra consola y invocamos bash + el nombre del script)/*]
  4. Hemos hecho nuestro pirmer script con el orden “echo” (que sirve para escribir en consola/*]
  1. Lo que es una** variable** (ejemplo del cajón), como declarar la (nombre_de_la_variable=valor_de_la_variable) y como usar la ( con el simbolo $ para ver su valor) /*]
  2. Lo que es una **expresión regular **(una cadena cualquiera que definimos) y a que sirve (se usa para buscar coincidencias)/*]
  3. Como usar básicamente el comando grep que permite definir y “jugar” con expresiones regulares/*]
  4. El comando “cut” que nos permite recortar texto/*]
  5. El** pipe** (“|”) que encadena dos comandos mandando el resultado del primero comando (su stdout) al segundo comando /*]
  1. La técnica del fichero de transición que consiste en guardar la salida de nuestras consolas para usarla posteriormente/*]
  2. El comando “cat” que nos permite abrir un fichero de texto/*]
  3. El comando “tee” que nos permite duplicar la salida de nuestra consola para guardar la en un fichero de texto /*]
  4. El comando “read” que nos permite leer lo que entra el usuario en consola/*]

[h]1) Condición univoca “if - then - fi”[/h]

Es el caso el más simple y se entiende solo si traducimos al español.

if (si) - condition (condición ) - then (entonces) - comand (ordene(s)) -fi

SI la condición que definimos se realiza; ENTONCES se ejecuta(n) el(los) ordenes(s). Usamos “fi” al final para cerrar la secuencia de ordenes a ejecutar si se cumple la condición

[quote]if ( si - instrucción de abertura de nuestra condición )
expression ] ( condición )
then ( instrucción que indica que hemos acabado de definir nuestra condición )
Statement(s) to be executed if expression is true ( ordenes a ejecutar si se cumple la condición la condición )
fi (instrucción de cierre) [/quote]
bash va a leer desde if a** fi.** Si no ponemos un** fi al fi**nal de nuestra condición obtendremos un error.

Ejemplo practico. Seguimos imaginando que queremos hacer algo para pixiedust y pixiewps.
Para lanzar reaver se necesitan privilegios de administrador si … o si. Por lo tanto tenemos un caso simple a resolver : asegurar nos en inicio de script que el usuario tiene los privilegios necesarios. Se llama una condición de control.
Vamos entonces a redactar hoy el inicio de nuestro script y para ello vamos a usar el comando whoami
whoami pone en consola el nombre del usuario. Es su única función. https://www.wifi-libre.com/img/members/3/bash4_2.jpg

[h]2) Redactar nuestra condición con operadores[/h]

Los operadores son elementos sintácticos que nos permiten hacer comparaciones. No se si les suena los Operadores booleanos… es algo bastante simple y muy importante (fundamental en electrónica-informática).
Para más detalles : Operadores
Bash tiene varios operadores que podemos usar para redactar nuestras condiciones.
en nuestro ejemplo nos interesa comparar que la cadena “root” es la que sale cuando se ejecuta “whami”. No es una operación aritmética por lo tanto usaremos los operadores para comparación de cadenas

[quote]Operador Uso
= Comprobamos que dos cadenas son similares.
!= Comprobamos que dos cadenas son diferentes
-z Comprobamos que una cadena sea vacila (nula, que no haya ninguno símbolo)
-n Comprobamos que una cadena contenga por lo menos un carctere (que no sea nula) [/quote]

Unix basics operators

[h]3) Condición de control de privilegios [/h]

Lo que vamos a hacer es
Si
- el resultado de “whoami” NO es root
Entonces
- advertimos al usuario de que el script requiere privilegios de usuarios con una orden echo
- cerramos el script con exit*
*EXIT : permite parrar el proceso inciado al ejecutar un script. Es decir “salir y cerrar” un script. Podemos indicar un “estado” de salida.
Exit 0 salimos en estado de “exitó” el script ha podido desarolar se como se supone.
Exit 1 salimos en estado de “error”. No se ha podido ejecutar el script como debido.

Si - el resultado de “whoami” NO es root
se pondría así

if  "$(whoami)" != 'root' ];
  1. La condición se pone entre dos** **** ]**/*]
  2. Es muy importante que haya un espacio entre cada elemento. sino tendremos un error /*]
  3. También notar los " " que encierran la $VARIABLE y los ’ ’ que encieran la cadena. Ha de ser así/*]
  4. usamos el operador lógico “diferente” ( != - "no igual a " )/*]

entonces tendríamos esto

if "$whoami" != 'root' ] # Abrimos nuestra condición con "if" . Nuestra condición verifica que el resultado de whoami sea diferente de "root" then # si es asi es que no podremos ejecutar reaver o pasar el mode monitor echo " This script requires root privileges Please run it with sudo ( sudo bash script.sh ) " # con "echo" escribimos en consola une mensaje de advertencia exit 1 # salimos en "estado de error" fi # Instrucción de cierre que indica el fin de los ordenes a ejecutar si la condición se cumplía

A modo de ejemplo veamos como legar al mismo resultado usando otro operador. Y vamos a usar un pipe con grep para jugar con las expresiones regulares vistas anteriormente.
Porque con grep podemos hacer que la cadena sea nula o no si elegimos la expresión regular root
Con el operador -z verificamos que una cadena es nula. Si no tiene root es que no somos rot

if -z "$( whoami | grep root)" ] # Si no obtenemos nada buscando la palbra "root" con el grep en el resultado de "whoami" then # entonces no somos root echo " This script requires root privileges Please run it with sudo ( sudo bash script.sh ) " # con "echo" escribimos en consola une mensaje de advertencia exit 1 # salimos en "estado de error" fi # Instrucción de cierre que indica el fin de los ordenes a ejecutar si la condición se cumplía

[h]4) Condición “binaria” if-then-else-fi [/h]

Es muy simple. Tenemos que entender “else” como “de otra forma” “de lo contrario”

if condición ] # definimos nuestra condicón "si" se verifca... then # ...si se verifica; "entonces" se ejecutan ordenes # estas ordenes else # "de lo contrario" (si la condición no se verifica) ordenes # se ejecutan estos ordenes fi # instrucción de cierre
ejemplo de script, esta vez usaremos el operador “=” (igual a )
si somos rot : bien, obtenemos un mensage de exitó y salimos del script en estado de exito

#!/bin/bash if "$(whoami)" = 'root' ]; # Si (if) el resultado del comando "whoami" es "root" then # Entonces (then) tenemos los privilegios requeridos echo "You have the required privleges to execute the script!" # Y escribimos en consola un mensaje de éxito else # De lo contrario (else) - es decir si el resultado de "whoami" es otro que root echo " This script requires root privileges Please run it with sudo ( sudo bash script.sh ) " # No disponemos de los privilegios de administrador : con "echo" escribimos en consola une mensaje de advertencia exit 1 # salimos por lo tanto en "estado de error" (1) con "exit" fi # fi es la imprescindible Instrucción de cierre que indica el fin de los ordenes a ejecutar echo "script under development, see you in the next lesson" # el script sigue su curso exit 0 # y salimos en estado 0 (no errores)

[h]5) Condiciones “multiples” if-then-else-fi [/h]

podemos multiplicar al infinito las condiciones con las condiciones multiples

if condición 1 ] then orden(s) que se ejecutan si la condición una se cumple elif condición 2 ] then orden(s) que se ejecutan si la condición dos se cumple etc.... fi

Una cosa que necesitamos para hacer un ataque pixie dust es tener privilegios de superusuarios y acabamos de codificarlo.
Otra cosa (elif) que deberíamos comprobar es, por ejemplo que el usuario tenga pixiedust instalado…
Si pixiedust esta instalado tenemos a un fichero ejecutable pixie dust en nuestra sistema…
pixiewps se instala en /usr/local/bin : https://www.wifi-libre.com/img/members/3/bash4_4.jpg
De paso podemos verificar que aircrack-ng y reaver sean instalados. :wink:
LS es un comando que permite hacer listados de fichero. funciona un poco como grep si lo usamos con una ruta absoluta…
ejemplo : https://www.wifi-libre.com/img/members/3/bash4_5.jpg
Como veis si el fichero existe la consola devuelve el nombre del fichero en verde ( como grep lo hace con la expresión regular pero en riojo)
Si no existe devuelve un mensage de error
Pongamos esto en practica con una condición múltiple que pondremos en inició de nuestro script

#!/bin/bash if "$(whoami)" != 'root' ] # Abrimos nuestra condición con "if" . Nuestra condición verifica que el resultado de whoami sea diferente de "root" then # si es asi es que no podremos ejecutar reaver o pasar el mode monitor echo " This script requires root privileges Please run it with sudo ( sudo bash script.sh ) " # con "echo" escribimos en consola une mensaje de advertencia exit 1 # salimos en "estado de error" (1) elif "$(ls /usr/local/bin/pixiewps)" != '/usr/local/bin/pixiewps' ] # segunda condición a verifcar : la presencia de pixiewps en usr/local/bin then echo " This script requires pixiedust Please download and install pixiedust " # advertencia y exit 1 # salida en estado en error elif "$(ls /usr/local/bin/reaver)" != '/usr/local/bin/reaver' ] || "$(ls /usr/local/bin/pixiewps)" != '/usr/local/bin/pixiewps' ] # tercera condicion si no tenemos reaver o buly no podremos hacer el attaque asi que avortamos la misión then echo " This script requires a modified version of reaver or bully Please download or install one of this tool " exit 1 # salida en estado en error else # usamos else para escribir un mensage de exito (inecesario pero para hacer un bucle con todos los argumentos echo " It seems that your sytem is prepared for pixiedust atack :) Good luck!" fi # la necesaría instrucción de cierre "fi" que indica el "fi"nal de nuestra condición echo " Script under construction... See you in next chapter at www.wifi-libre.com" exit 0

notareís que he puesto en la condición 3 dos condiciones a cumplir tenr reaver o bien tenr buly. Se hace usando el opeador OR ( || )

tenemos a dos condiciones que tenemos que verifcar. si una o la otra se verfica ejecutaremos el codigo atribuido

Fin del capituló. hasta pronto