sábado, 22 de septiembre de 2012

Curso scripting bash (read case esac)


Esta es la parte 6 de los tutoriales tipo cursos para aprender como funciona el lenguaje de programacion bash y porque no,para aprender a crear scripts o programas que nos ayuden a usar o administrar el sistema

Bueno en estas son las partes anteriores:

Parte 1


Parte 2


Parte 3

Parte 4  

Parte 5

En esta ocacion veremos case y esac que seria case y su palabra alrevez esac,como ocurre con if en bash se cierra con fi,que es if volteado,bueno case y esac nos permiten tomar deciciones mezclando esto con read,read es una toma de decisiones,es interactuar desde el teclado con la terminal,esto ya lo hemos visto en python y mono C# en este sitio,y bueno vamos a empezar con los ejemplos:

El programa hola mundo,es el que se encarga de imprimir texto en la terminal o ventana en dado caso de un lenguaje,el programa hola mundo fue el primero que vimos en estos tutoriales pero lo traigo de nuevo,vitaminado con condicionales if,fi y el comando read

Código:

#!/bin/bash
echo " Escribe hola mundo"
tex="Hola Mundo"
read opcion
if [[ $opcion = $tex ]]
then
echo -e "\e[1;34m$opcion\e[0m"
else
echo "No escribiste bien"
exit 0;
fi




Lo explico

Aquí usamos una variable(tex) para definir el texto "Hola Mundo" nos da toma de decisión con el comando read y al final compara con una condicional(ya las vimos en una entrada pasada) si se cumple el texto,si se cumple ejecuta Hola Mundo en color azul y si no se cumple muestra "No escribiste bien" y se cierra el programa.


Ahora ¿el comando case para que sirve?

bueno nos ayuda ha desviar la respuesta a un comando,que puede ser del sistema o algo local

codigo:

#!/bin/bash
echo "Presiona t para mostrar texto"
echo "Presiona l para listar tu contenido"
read opcion
case $opcion in
t)
echo "Hola Mundo"
;;
l)
ls
;;
*)
echo "Opcion incorrecta saliendo..."
;;
esac

Bien,explico el código con #

#!/bin/bash
echo "Presiona t para mostrar texto" # Mostramos la opciones
echo "Presiona l para listar tu contenido" # Mostramos las opciones
read opcion # Leemos las opciones
case $opcion in # Tomamos las opciones
t) # Si elegimos t...
echo "Hola Mundo" #Muestra esto
;; # Símbolo de cierre de elección
l) # Si elegimos l...
ls # Ejecuta esto,comando del sistema que lista el contenido
;; # Simbolo de cierre de elección
*) # Si no elegimos ninguna de las anteriores...
echo "Opcion incorrecta saliendo..." # Se muestra esto y sale
;; # Simbolo de cierre de elección
esac # Cierre de case

Ahora,como se pueden haber dado cuenta solo se elige de a una letra l) o t) esto no es necesariamente así,ya que se puede usar texto) o listar),incluso esto puede ir mas haya usando este símbolo | que quiere decir or en español o,por ejemplo tener dos palabras o letras para ejecutar,solo un comando,por ejemplo listar|LISTAR) que seria listar o LISTAR

codigo:

#!/bin/bash
echo "Presiona t para mostrar texto"
echo "Presiona l para listar tu contenido"
read opcion
case $opcion in
t|texto|TEXTO) # Varias palabras o letras
echo "Hola Mundo"
;;
l|listar|LISTAR)
ls
;;
*)
echo "Opcion incorrecta saliendo..."
;;
esac

Aquí lo único que se tiene que explicar es que se pueden usar varias palabras o letras que si son elegidas con read,ejecutara solo un comando.

Ahora como hacer para que no se cierre hasta que escribamos Hola Mundo? bueno para eso haremos uso de un bucle while

#!/bin/bash
while [ 1 ]; do
read opcion
case $opcion in
t|T)
echo "Hola Mundo"
;;
s|S)
exit 0;
;;
help)
echo "Presiona s para salir"
echo "Presiona t para mostrar texto"
;;
*)
echo "Opcion incorrecta"
echo "Presiona help para obtener ayuda"
;;
esac
done

Vieron,se pueden hacer cosas muy buenas con bash,ahora explico el codigo con #

#!/bin/bash
while [ 1 ]; do # Iniciamos bucle con una condición logica,repetira y repetira los comandos hasta encontrarse con algún exit que lo cierre o algún argumento que rompa el bucle
read opcion
case $opcion in
t|T)
echo "Hola Mundo"
;;
s|S) # Este comando cierra el bucle y sale del programa
exit 0; Argumento
;;
help) # Añadido help para mostrar los textos
echo "Presiona s para salir"
echo "Presiona t para mostrar texto"
;;
*) # Si se presiona cualquier otra tecla que no este asignada,mostrara esto y podremos ver la guia del pequeño programa
echo "Opcion incorrecta"
echo "Presiona help para obtener ayuda"
;;
esac
done

Bien ahora si usamos el comando clear(no lo uso mucho) para limpiar la pantalla y que se vea un poco mejor usaríamos algo como lo que esta en el enlace de abajo, también usariamos sleep en el codigo y para que se vea un poco mas bonito vamos a identarlo

Enlace

Les recomiendo que identen, aunque bash no sea como python y de un error,les recomiendo que identen con tab los scripts que creen,los dos codigos de abajo no estan identados.

Bueno en el código use n=1,que quiere decir que le doy el valor de 1 a la variable n,luego cuando entra en el bucle y ve si la variable n es igual a 1,si lo ejecuta,luego cuando encuentra en un comando que n es 2 u otro valor se cierra,es parecido a exit solo que en ocaciones puede ser mas eficas si el codigo es largo ya que tambien se pudo haber escrito de esta manera

Código anterior:

#!/bin/bash

n=1
while [ $n = 1 ] 
do

clear
echo "Texto o Salir (t/s)"
read opcion

case "$opcion" in

t|T)
clear
echo "Hola Mundo"
sleep 3
n=2 # Argumento que rompe el bucle
;;
s|S)
n=2
;;
help)
                clear
echo "Presiona s para salir"
echo "Presiona t para mostrar texto"
sleep 3
;;
*)
clear
echo "Opcion incorrecta"
echo "Presiona help para obtener ayuda"
sleep 3
;;

esac
done

Otra forma de escribirlo:


#!/bin/bash

while [ 1 ]; do

  clear
echo "Texto o Salir (t/s)"
read opcion

  case "$opcion" in

  t|T)
clear
echo "Hola Mundo"
sleep 3
exit 1;
;;
s|S)
exit 2;
;;
help)
                clear
echo "Presiona s para salir"
echo "Presiona t para mostrar texto"
sleep 3
;;
*)
clear
echo "Opcion incorrecta"
echo "Presiona help para obtener ayuda"
sleep 3
;;

  esac
done

Les dejo un video de demostración del codigo anterior,ya identado y ejecutado




Bueno eso es todo,lo que hay que hablar sobre case esac y read,en la proxima entrada veremos operaciones aritmeticas que no lo hemos visto y es de lo primero que debi haber escrito XD


No hay comentarios.:

Publicar un comentario

Los comentarios serán revisados antes de ser publicados.