Introducción a bash -paso4- Condiciones "if-elif-else-fi" (Pagina 1) / Scripts y programación / Foro Wifi-libre.com

El libre pensamiento para un internet libre

No estas registrado.     

Anuncio

Wifi-highpower.es es distribuidor oficial de Alfa Network

#1 15-04-2015 04:38:01

kcdtv
Administrator

Registrado: 14-11-2014
Mensajes: 2,051

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

Introducción a bash : Paso 4

bash4_1.png

Las condiciones "if-esle-fi" y "if-elif-else-fi"

  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:

   - En nuestro primer curso ( Introducción a bash - paso 1: Bases, echo y "Hola mundo") hemos visto;

  • Lo que es bash (el interprete de ordenes de las distribuciones GNU-Linux)

  • Como redactar un script bash (un simple fichero de texto que se distingue por su primera liña, la famosa  "bang-line!" :  #!/bin/bash

  • Como ejecutar un script bash (nos situamos en el directorio con nuestra consola y invocamos bash + el nombre del script)

  • Hemos hecho nuestro pirmer script con el orden "echo" (que sirve para escribir en consola

- En nuestro segundo curso Introducción bash, paso 2 : variables, expresion regular (grep) y pipe hemos visto:

  • 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)

  • Lo que es una expresión regular (una cadena cualquiera que definimos) y a que sirve (se usa para buscar coincidencias)

  • Como usar básicamente  el comando grep que permite definir y  "jugar" con expresiones regulares

  • El comando "cut" que nos permite recortar texto

  • El pipe ("|") que encadena dos comandos mandando el resultado del primero comando (su stdout) al segundo comando

- En nuestro tercero curso Introducción a bash -paso3- fichero de transición, cat, tee y read hemos visto:

  • La técnica del fichero de transición que consiste en guardar la salida de nuestras consolas para usarla posteriormente

  • El comando "cat" que nos permite abrir un fichero de texto

  • El comando "tee" que nos permite duplicar la salida de nuestra consola para guardar la en un fichero de texto

  • El comando "read" que nos permite leer lo que entra el usuario en consola

1) Condición univoca "if - then - fi"

  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

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)

bash va a leer desde if a fi. Si no ponemos un fi al final 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. bash4_2.jpg 

2) Redactar nuestra condición con operadores

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

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)

Unix basics operators

3) Condición de control de privilegios

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' ];
  • La condición se pone entre dos [ ]

  • Es muy importante que haya un espacio entre cada elemento. sino tendremos un error

  • También notar los " " que encierran la $VARIABLE y los ' ' que encieran la cadena. Ha de ser así

  • 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

bash4_3.jpg

4) Condición "binaria" if-then-else-fi

  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)  
5) Condiciones "multiples" if-then-else-fi

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 : 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 :  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 ( || )

elif [ "$(ls /usr/local/bin/reaver)" != '/usr/local/bin/reaver' ] || [ "$(ls /usr/local/bin/pixiewps)" != '/usr/local/bin/pixiewps' ]

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

  Fin del capituló. hasta pronto

Desconectado

Anuncio

Wifi-libre.com: El libre pensamiento para un internet libre / Regístrese ahora

Pie de página

Información del usuario

Ultimo usuario registrado: Ike
Usuarios registrados conectados: 1
Invitados conectados: 4

Conectados: Ike

Estadisticas de los foros

Número total de usuarios registrados: 356
Número total de temas: 615
Número total de mensajes: 4,217

Máx. usuarios conectados: 45 el 12-04-2016 12:02:20