Linux en Español

Scripting de Bash en Linux Parte 3 – Parámetros y opciones

Hasta ahora has visto cómo escribir scripts de bash de Linux que funcionan sin la entrada de los usuarios, en esta ocasión continuaremos nuestra serie acerca del scripting de bash, en especial el pase de parámetros y opciones.

Te recomiendo que revises las publicaciones anteriores si quieres saber de qué estamos hablando.


scripting de bash tutorial

scripting de bash ciclos For y While

 

Hoy aprenderemos cómo obtener los datos de entrda de un usuario y como tratar con esta entrada, para que nuestro script se vuelva más interactivo.

Para pasar datos a tu script de shell, debes utilizar los parámetros de la línea de comando.

$ ./myscript 3 5

Aquí enviamos 2 parámetros (3 y 5) al script. Entonces, ¿cómo se pueden leer estos parámetros

Parámetros de lectura

El shell te da algunas variables de lectura para procesar los parámetros de entrada:

  • $ 0 es el nombre del script.
  • $ 1 es el primer parámetro.
  • $ 2 es el segundo parámetro.

Hasta el noveno parámetro, que es $ 9

A continuación, vamos a ver estos parámetros en acción:


Verifica los resultados del siguiente comando:

./myscript 5 10 15

Linux Parámetros y opciones

Este es otro ejemplo de cómo podemos usar dos parámetros y calcular la suma de ellos.


$ ./myscript 5 10

parámetros

Los parámetros no están restringidos a números, podrían ser cadenas de caracteres como la siguiente:


./myscript Adam

El resultado es el esperado.

string parámetros

¿Qué pasa si nuestro parámetro contiene un espacio y queremos pasarlo como un valor? Supongo que sabes la respuesta de las publicaciones anteriores. La respuesta es utilizar comillas.

Si tú script requiere más de nueve parámetros, debes utilizar llaves de la siguiente forma $ {10}.

 

Verificar parámetros

Si no pasas los parámetros y tu código los espera, tu script se cerrará con un error.

Es por eso que deberíamos hacer una sentencia if para asegurarnos de que existen.


Verificar parámetros



Contando parámetros

Para obtener la cantidad de parámetros pasados, puede utilizar esta variable ($ #).


./myscript 1 2 3 4 5

Contando parámetros

¿ves cuan impresionante es el scripting de bash de Linux? Esta variable también proporciona una forma geek para obtener el último parámetro. Mira este truco:


último parámetro


Iterar sobre los parámetros

La variable $ * contiene todos los parámetros como un solo valor.

La variable $ @ contiene todos los parámetros como valores separados, por lo que puede iterar sobre ellos.

Este código muestra cómo utilizarlos:


Iterar sobre los parámetros

El resultado es el mismo, pero si quieres saber la diferencia mira el siguiente ejemplo:


Verifica el resultado para ver la diferencia:

conteo de parámetros

El resultado es bastante claro. Puedes usar cualquiera según tus necesidades.

 

Variable de desplazamiento de parámetros

El comando shift mueve cada parámetro de variable a la izquierda:

variable $ 3 ==> variable $ 2.

variable $ 2 ==> variable $ 1.

variable $ 1 ==> eliminada.

variable $ 0 ==> (el nombre del script) no se modifica.

Puede usar el comando shift para iterar sobre parámetros como se muestra a continuación:


Aquí, tenemos un ciclo while que comprueba la longitud de $ 1. Si $ 1 se convierte en cero, el ciclo se detiene. Y el comando shift está desplazando todos los parámetros pasados a la izquierda.

Variable de desplazamiento de parámetros

Ten cuidado al utilizar el comando shift, el parámetro desplazado se ha eliminado y no se puede recuperar.

 

Opciones de scripts de Bash

Las opciones son letras simples con un guion antes.


$ ./myscript -op1 -op2 -op3 -op4

Opciones de scripts de Bash

El código verifica las opciones. Si escribiste alguna, se ejecutarán los comandos adecuados.

 


Parámetros y opciones: Como separarlos

Algunas veces necesitas usar opciones y parámetros en el mismo script. Tienes que separarlos. Al hacer esto, le está diciendo al bash dónde están los parámetros y dónde están las opciones.

El doble guion (–) se utiliza para finalizar la lista de opciones. Después de que el shell ve el doble guion, las entradas restantes se tratan como parámetros y no como opciones.


$ ./myscript -a -b -c -- 5 10 15

Parámetros y opciones

Como puedes ver en el resultado, todos los parámetros después del doble guion son tratados como parámetros y no como opciones.

 

Procesar opciones con valores

Cuando profundizas en la creación de scripts de bash de Linux, a veces necesitas opciones con valores de parámetros adicionales como las siguientes:

./myscript -a value1 -b -c value2

Debería haber una manera de identificar cualquier parámetro adicional para las opciones y poder procesarlo.


Y si lo ejecutamos con estas opciones:

$ ./myscript -a -b test1 -d

Procesar opciones con valores

A partir de los resultados, puede ver que obtenemos el parámetro para la opción -b usando la variable $ 2.

 

Opciones estándar

Cuando inicies tu script de bash, puede elegir qué letra es la más adecuada para la opción que desees.

Sin embargo, hay algunas letras que se usan comúnmente en los programas de Linux.

Aquí está la lista de las opciones comunes:

-a         Listar todos los elementos.

-c         Obtener la cantidad de elementos.

-d         Directorio de salida.

-e         Expandir elementos.

-f         Especificar un archivo.

-h         Mostrar la página de ayuda.

-i          Ignorar mayúsculas.

-l          listar un texto.

-n         Decir que no a una pregunta.

-o         Para enviar la salida a un archivo o más.

-q         No preguntar al usuario.

-r         Procesar algo recursivamente.

-s         Modo sigiloso.

-v         Modo detallado.

-x         Especificar el ejecutable.

-y         Decir sí sin preguntar al usuario.

Si trabajas con Linux, muchas de estas opciones pueden resultarte familiares.

Es bueno seguir los estándares.

 


Obtener la entrada del usuario utilizando el comando read

Algunas veces necesitas datos del usuario mientras se ejecuta el script de bash.

El shell de bash utiliza el comando read para este propósito.

El comando read lee la entrada desde el STDIN (el teclado) o desde un descriptor de archivo y la almacena en una variable:


La opción -n se usa para deshabilitar la nueva línea, por lo que puedes escribir tu texto en la misma línea..

Obtener la entrada del usuario

Puedes especificar entradas múltiples como se muestra a continuación:


entrada múltiple

Si no especificas variables para el comando de lectura, todas las entradas se guardan en la variable REPLY.


variable de respuesta

Puedes utilizar la opción -t para especificar un tiempo de espera para la entrada en segundos.


Si no ingresas datos durante cinco segundos, el script ejecutará la sentencia else e imprimirá un mensaje de disculpas.

se acabó el tiempo

Leer contraseñas

En el scripting de bash de Linux, a veces no deseas que la entrada del usuario se muestre en la pantalla, como al ingresar una contraseña.

La opción -s oculta los datos ingresados en el comando read.

Los datos se imprimen realmente en la pantalla, pero el comando read hace que el color del texto sea del color de fondo del shell.


entrada oculta

Leer archivos

El comando read puede leer archivos de una línea en cada llamada.

Si desea obtener todos los datos de archivo, puede obtener el contenido utilizando el comando cat y luego enviarlo al comando read utilizando un ciclo while de la siguiente manera:


O podemos simplificarlo redireccionando el contenido del archivo al ciclo while de esta manera:


Leer archivos

Pasamos el contenido del archivo al ciclo while e iteramos sobre cada línea e imprimimos el número de línea y el contenido, además, con cada iteración aumentamos el conteo en uno.

Espero que encuentres esta publicación acerca de los parámetros y opciones interesante. Espero vuelvas pronto.

Gracias.

Mokhtar Ebrahim
Estoy trabajando como administrador de sistemas Linux desde 2010. Soy responsable de mantener, proteger y solucionar problemas de servidores Linux para múltiples clientes de todo el mundo. Me encanta escribir guiones de shell y Python para automatizar mi trabajo.

Deja un comentario

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