Curso de Linux N21. Programación en Bash 008: Entradas por teclado.

By rafaelaquino on 10/19/2023

Cordiales Saludos

![21_portada.png](Image from post)
![banner_bash.png](Image from post)

Corresponde en esta publicación tratar el tema de la Entrada de Datos por teclado. Esta acción la veremos cada vez que estudiemos un lenguaje de programación.

Todas las variables usadas hasta hoy la hemos asignado directamente dentro del script. Con la entrada de datos tenemos una opción muy potente para el tratamiento de los datos. Ahora podemos entrar datos distintos cada vez que ejecutemos el programa. Aquí se abre un nuevo mundo de posibilidades.

A continuación la estructura básica para solicitarle un dato al usuario por medio del teclado.

![21_60.png](Image from post)

Ejecución del código

$ bash script_60.sh 
Introduce por teclado un color
blanco
Ingresaste el color: blanco
![0-separador_bash.png](Image from post)
La forma resumida o mejorada es usando directamente **read** con la opción -p.
![21_61.png](Image from post)
Ejecución del código ~~~ $ bash script_61.sh Introduce por teclado un color: blanco Ingresaste el color: blanco ~~~
![0-separador_bash.png](Image from post)
Si por algún motivo o por nuestro propio interés no colocamos una variable para recibir lo que introducimos por teclado, esta información se guarda en una variable interna denominada $REPLY.
![21_62.png](Image from post)
Ejecución del código ~~~ $ bash script_62.sh Introduce por teclado un color: Blanco Ingresaste el color: Blanco ~~~
![0-separador_bash.png](Image from post)
En los scripts anteriores cuando escribíamos con el teclado, se mostraba lo que íbamos escribiendo. Con la opción **-s** lo que escribamos no se mostrará. Ya esto lo hemos visto cuando nos piden una contraseña. Y en el siguiente script simulo la solicitud de una contraseña.
![21_63.png](Image from post)
Ejecución del Código ~~~ $ bash script_63.sh Introduce por teclado la contraseña: Tu contraseña es: (8EuN34@#/.Po ~~~
![0-separador_bash.png](Image from post)
Podemos solicitar varias variables al momento de solicitar los datos. Dependerá del mensaje, para que el usuario sepa cuantos valores debe introducir y muy importante tener las variables que recibirán dichos valores. Aquí solicitamos dos datos y tenemos dos variables para recibirlos: **num1 y num2**
![21_64.png](Image from post)
Ejecución del código ~~~ $ bash script_64.sh Introduce dos numero: 123 321 Numero 1: 123 Numero 2: 321 ~~~
![0-separador_bash.png](Image from post)
Podemos solicitar más de un dato y guardarlos dentro de un vector, con la opción **-a**.

Esta opción es más efectiva que la descrita en el script anterior. Imaginemos que con la estructura anterior necesitamos 10 datos, debemos tener 10 variables para recibirlos, en cambio usando el vector es ilimitado el número de datos a introducir.

![21_65.png](Image from post)
~~~ $ bash script_65.sh clear Introduce varios numero: 3 5 7 9 10 El vector es 3 5 7 9 10 El primer elemento es: 3 El ultimo elemento es: 10 ~~~

Otra forma de hacer el ejercicio es:

  1 #!/bin/bash
  2 # script_65a.sh Por: Rafael Aquino
  3 # Entrada de datos por teclado, Vector
  4 
  5 read -p "Introduce varios numero: " -a vector
  6 echo "El vector es ${vector[@]}"
  7 echo "El primer elemento es: ${vector[0]}"
  8 echo "El ultimo elemento es: ${vector[-1]}"
  9 #...................................
                                          
![0-separador_bash.png](Image from post)
Podemos tener una variable por default que nos permitirá hacer nuestros script más dinámicos.

Ya este formato lo conocemos cuando instalamos un comando, aplicación o cuando actualizamos nuestro sistema:

Do you want to continue? [Y/n] Si colocamos Y o ENTER se ejecuta la acción.

![21_66.png](Image from post)
Ejecución del Código (Tecleando ENTER) ~~~ $ bash script_66.sh Deseas continuar? S/n (default: s)

Tu respuesta es: s

Ejecución del Código (Tecleando n)

$ bash script_66.sh Deseas continuar? S/n (default: s) n Tu respuesta es: n


Ejecución del Código (Podemos si queremos tipear "s" igual funcionará)

$ bash script_66.sh Deseas continuar? S/n (default: s) s Tu respuesta es: s

Otra forma:

1 #!/bin/bash 2 # script_66a.sh Por: Rafael Aquino 3 # Entrada de datos por teclado, nombre por default 4 5 read -p "Deseas continuar? S/n (default: s) " resp 6 resp="${resp:=s}" 7 echo "Tu respuesta es: $resp" 8 #...................................


<center>
![0-separador_bash.png](Image from post)
</center>

Otra forma de darle dinamismo a nuestros script es colocando un tiempo de espera para que tecleemos **algo**, transcurrido el tiempo y si no hemos introducido ningún valor se sale del la solicitud de datos.
En esta oportunidad combiné la variable **default** (visto en el ejercicio anterior) con este ejercicio, por si no se teclea nada, automáticamente coloca el valor por **default**. 
<center>
![21_67.png](Image from post)
</center>
Ejecución del código (Expirando el tiempo)

$ bash script_67.sh Introduce un numero, (default: 10) Tu respuesta es: 10

Ejecución del código (introduciendo un número por teclado)

$ bash script_67.sh Introduce un numero, (default: 10) 543 Tu respuesta es: 543

Otra forma

1 #!/bin/bash 2 # script_67a.sh Por: Rafael Aquino 3 # Entrada de datos por teclado, expiracion de espera 4 5 read -p "Introduce un numero, (default: 10)" -t 10 resp 6 resp="${resp:=10}" 7 echo "Tu respuesta es: $resp" 8 #...................................


<center>
![0-separador_bash.png](Image from post)
</center>

Esta formato de solicitud de dato es muy útil cuando queremos limitar el número de caracteres. Si necesitamos tres caracteres sólo tomará tres caracteres. 
<center>
![21_68.png](Image from post)
</center>
Ejecución del código

$ bash script_68.sh Introduce un numero de tres cifras 678 Tu numero es: 678

Otra forma

1 #!/bin/bash 2 # script_68a.sh Por: Rafael Aquino 3 # Entrada de datos por teclado, limite de caracteres 4 5 read -p "Introduce un numero de tres cifras " -n 3 resp 6 echo -e "\nTu numero es: $resp" 7 #...................................


Hasta aquí nuestra publicación. Como siempre modifiquemos todos estos ejercicios para tener mas dominios sobre ellos.

>IMPORTANTE: Los comando vistos aquí y en próximas publicaciones están limitados para mostrarlos y conceptualizarlos para nuestro quehacer diario. Cada comando tiene muchas opciones que debemos investigar por nuestra propia cuenta cuando estemos trabajando con ellos. Aprovechemos el internet para conocer en profundidad el comando que estemos estudiando y en primer orden no olvidemos lo potente y todo lo que nos brinda el comando **man** para conocer la sintaxis y todo lo relacionado con todos los comandos que tenemos en nuestro sistema sin recurrir a internet. 



<center>
![bannerfundamentos.png](Image from post)
</center>

Todos a practicar, incluyéndome! Nos vemos en la próxima publicación...

---

Estos ejercicio y los anteriores los puedes encontrar en el repositorio del curso: https://gitlab.com/btcsiraquino/hp_bash_ejercicios

---

[Mi Twitter](https://twitter.com/Rafa_elaquino)

Comments (2)

stemsocial's avatar @stemsocial 10/20/2023

Thanks for your contribution to the STEMsocial community. Feel free to join us on discord to get to know the rest of us!

Please consider delegating to the @stemsocial account (85% of the curation rewards are returned).

You may also include @stemsocial as a beneficiary of the rewards of this post to get a stronger support. 
 

ubaldonet's avatar @ubaldonet 10/27/2023

Te va a tocar poner una etiqueta por curso para poder usarlo como lista y asi traer un curso en especifico completo

rafaelaquino's avatar @rafaelaquino 10/28/2023