tutorial de Scripting Bash-3. Entrada del usuario

entrada del Usuario!

hagamos que nuestros scripts sean interactivos.

Introducción

Nos miramos un formulario de entrada de usuario (argumentos de línea de comandos) en la sección anterior. Ahora nos gustaría introducir otras formas en que el usuario puede proporcionar entrada al script Bash. Después de esto, tendremos una discusión sobre cuándo y dónde es mejor usar cada método.

después de la sección anterior de mamut, esta es mucho más fácil de pasar.,

preguntar al usuario por la entrada

Si queremos preguntar al usuario por la entrada entonces usamos un comando llamado read. Este comando toma la entrada y la guardará en una variable.

leer var1

veamos un ejemplo sencillo:

Vamos a desglosarlo:

  • Línea 4 – Imprimir un mensaje preguntando al usuario para la entrada.
  • línea 6-ejecute el comando read y guarde la respuesta del usuario en la variable varname
  • línea 8-haga eco de otro mensaje solo para verificar que el comando read haya funcionado. Nota: tuve que poner una barra invertida ( \ ) delante del ‘ para que se escapara.,
  1. ./introduction.sh
  2. Hola, ¿a quién estoy hablando?
  3. Ryan
  4. Es un placer conocerte Ryan
  • Nota: Ryan está en cursiva solo para mostrar que fue algo que escribí. En su terminal de entrada se mostrará normalmente.

más con Read

puede modificar el comportamiento de read con una variedad de opciones de línea de comandos. (Vea la página de manual para leer para ver todos ellos.) Sin embargo, dos opciones comúnmente utilizadas son-p, que le permite especificar un prompt y-s, que hace que la entrada sea silenciosa., Esto puede hacer que sea fácil pedir una combinación de nombre de usuario y contraseña como el ejemplo a continuación:

  • en las líneas 4 y 5 de arriba incluimos el prompt dentro de las comillas para que podamos tener un espacio incluido con él. De lo contrario, la entrada del usuario comenzará inmediatamente después del último carácter del mensaje, lo que no es ideal desde el punto de vista de la legibilidad.
  1. ./login.sh
  2. nombre de Usuario: ryan
  3. Contraseña:
  4. Gracias ryan ahora tenemos su información de inicio de sesión

Más variables

hasta ahora hemos visto una sola palabra como entrada. Sin embargo, podemos hacer más que eso.,

cars.sh

  1. #!/ bin / bash
  2. # demostrar cómo funciona leer en realidad
  3. echo ¿qué Coches te gustan?
  4. leer car1 car2 car3
  5. echo Su primer coche fue: $car1
  6. se hacen eco de Su segundo coche fue: $car2
  7. se hacen eco de Su tercer coche fue: $car3
  1. ./cars.sh
  2. ¿Qué coches ¿te gusta?
  3. Jaguar Maserati, Bentley
  4. Su primer coche fue: Jaguar
  5. Su segundo coche fue: Maserati
  6. Su tercer coche fue: Bentley
  7. ./cars.sh
  8. ¿Qué coches ¿te gusta?,
  9. Jaguar Maserati, Bentley Lotus
  10. Su primer coche fue: Jaguar
  11. Su segundo coche fue: Maserati
  12. Su tercer coche fue: Bentley Lotus

El mecanismo general es que usted puede suministrar varios nombres de variable para leer. Read tomará tu entrada y la dividirá en espacios en blanco. El primer elemento se asignará al nombre de la primera variable, el segundo elemento al nombre de la segunda variable y así sucesivamente. Si hay más elementos que nombres de variable, los elementos restantes se agregarán al último nombre de variable., Si hay menos elementos que nombres de variables, los nombres de variables restantes se establecerán en blanco o null.

lectura desde STDIN

es común en Linux canalizar una serie de comandos simples de un solo propósito para crear una solución más grande adaptada a nuestras necesidades exactas. La capacidad de hacer esto es una de las verdaderas fortalezas de Linux. Resulta que podemos acomodar fácilmente este mecanismo con nuestros scripts también. Al hacerlo, podemos crear scripts que actúan como filtros para modificar los datos de maneras específicas para nosotros.

Bash acomoda la tubería y la redirección a través de archivos especiales., Cada proceso obtiene su propio conjunto de archivos (uno para STDIN, STDOUT y STDERR respectivamente) y se vinculan cuando se invoca la canalización o la redirección.,ollowing files:

  • STDIN – /proc/<processID>/fd/0
  • STDOUT – /proc/<processID>/fd/1
  • STDERR – /proc/<processID>/fd/2

To make life more convenient the system creates some shortcuts for us:

  • STDIN – /dev/stdin or /proc/self/fd/0
  • STDOUT – /dev/stdout or /proc/self/fd/1
  • STDERR – /dev/stderr or /proc/self/fd/2

fd in the paths above stands for file descriptor.,

así que si queremos hacer que nuestro script sea capaz de procesar los datos que se canalizan a él, todo lo que necesitamos hacer es leer el archivo relevante. Todos los archivos mencionados anteriormente se comportan como archivos normales.

vamos a desglosarlo:

  • Lines 4, 5, 6 – Print a title for the output
  • Line 8 – cat the file representing STDIN, cut setting the delimiter to a space, fields 2 and 3 then sort the output.

Entonces, ¿qué debo usar?,

así que ahora tenemos 3 métodos para obtener la entrada del usuario:

  • argumentos de línea de comandos
  • Leer la entrada durante la ejecución del script
  • Aceptar datos que han sido redirigidos al script Bash a través de STDIN

El método que es mejor depende de la situación.

normalmente debe favorecer los argumentos de la línea de comandos siempre que sea posible. Son los más convenientes para los usuarios, ya que los datos se almacenarán en su historial de comandos para que puedan volver fácilmente a él. También es el mejor enfoque si su script puede ser llamado por otros scripts o procesos (por ejemplo., tal vez quieras que se ejecute periódicamente usando CRON).

A veces la naturaleza de los datos es tal que no sería ideal que se almacenaran en historiales de comandos de la gente, etc. Un buen ejemplo de esto son las credenciales de inicio de sesión (nombre de usuario y contraseña). En estas circunstancias, es mejor leer los datos durante la ejecución del script.

si todo lo que el script está haciendo es procesar datos de cierta manera, entonces probablemente sea mejor trabajar con STDIN. De esta manera se puede agregar fácilmente a una tubería.

a veces puede encontrar que una combinación es ideal., El usuario puede proporcionar un nombre de archivo como argumento de la línea de comandos y si no, el script procesará lo que encuentre en STDIN (cuando veamos las sentencias If veremos cómo se puede lograr esto). O tal vez los argumentos de la línea de comandos definen cierto comportamiento, pero read también se usa para pedir más información si es necesario.

en última instancia, debe pensar en 3 factores al decidir cómo los usuarios proporcionarán datos a su script de Bash:

  • facilidad de uso: ¿cuál de estos métodos hará que sea más fácil para los usuarios usar mi script?,
  • Seguridad – ¿hay datos confidenciales que deba manejar adecuadamente?
  • robustez – ¿puedo hacer que mi operación de scripts sea intuitiva y flexible y también hacer que sea más difícil cometer errores simples?

Summary

read varName lee la entrada del usuario y la almacena en la variable varName. /dev / stdin un archivo que puede leer para obtener la STDIN para el script Bash
usabilidad su elección de métodos de entrada tendrá un impacto en la usabilidad de su script.

actividades

jugueteemos con la entrada.,

  • cree un script simple que le pedirá al usuario algunas piezas de información y luego combine esto en un mensaje que se transmitirá a la pantalla.
  • Add To the previous script to add in some data coming from command line arguments and maybe some of the other system variables.
  • cree un script que tomará datos de STDIN e imprimirá solo la 3a línea.
  • Ahora juega con la creación de un script que se comportará como un filtro., Cree un script que reorganice la salida del comando ls-l de una manera útil (por ejemplo, tal vez solo imprima el nombre del archivo, el tamaño y el propietario) (sugerencia: awk puede ser útil aquí).

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *