Guía para principiantes de BASH – Parámetros de entrada

Guía para principiantes de BASH – Parámetros de entrada

Guía para principiantes de BASH – Parámetros de entrada

VALORACIÓN DEL ARTÍCULO:
5/5


Bienvenido a la segunda parte de la serie Beginners Guide To BASH, que es única porque es el único tutorial de BASH escrito por un principiante para principiantes.

Los lectores de esta guía aumentarán sus conocimientos a medida que yo aumente mis conocimientos y, con suerte, al final de la misma podremos escribir algunos guiones bastante inteligentes.

La semana pasada cubrí la creación de su primer guión que simplemente mostraba las palabras «Hello World». Abarca temas como los editores de texto, cómo abrir una ventana de terminal, dónde poner sus scripts, cómo mostrar las palabras «Hello World» y algunos puntos más finos sobre caracteres de escape como las comillas («»).

Esta semana voy a cubrir los parámetros de entrada. Hay otras guías que enseñan este tipo de cosas, pero me parece que se meten en cosas de bajo nivel y tal vez proporcionan demasiada información.

¿Qué es un parámetro?

En el guión «Hello World» del último tutorial todo era muy estático. El guión no hizo mucho en realidad.

¿Cómo podríamos mejorar el script «Hello World»?

¿Qué hay de un guión que saluda a la persona que lo ejecuta? En lugar de decir «Hello World» dirá «Hello Gary», «Hello Tim» o «Hello Dolly».

Sin la capacidad de aceptar parámetros de entrada necesitaríamos escribir tres scripts «hellogary.sh», «hellotim.sh» e «hellodolly.sh».

Al permitir que nuestro script lea los parámetros de entrada podemos usar un script para saludar a cualquiera.

Para ello, abra una ventana de terminal (CTRL + ALT + T) y navegue hasta la carpeta de scripts escribiendo lo siguiente: (sobre el comando cd)

 scripts de cd 

Cree un nuevo script llamado greetme.sh escribiendo lo siguiente: (acerca del comando táctil)

 touch greetme.sh 

Abra el script en su editor favorito escribiendo lo siguiente: (sobre nano comando)

 nano greetme.sh 

Introduzca el siguiente texto dentro de nano:

 #!/bin/bashecho "hello $@" 

Pulse CTRL y O para guardar el archivo y luego CTRL y X para cerrarlo.

Para ejecutar el script, introduzca lo siguiente en la línea de comandos reemplazando con su nombre.

 sh greetme.sh 

Si ejecuto el script con mi nombre muestra las palabras «Hello Gary».

La primera línea tiene la línea #!/bin/bash que se usa para identificar el archivo como un script bash.

La segunda línea usa la sentencia echo para hacer eco de la palabra hello y luego está la extraña anotación $@. (sobre el comando echo)

El signo $@ se expande para mostrar todos los parámetros que se introdujeron junto con el nombre del script. Así que si escribes «sh greetme.sh tim» se mostrarán las palabras «hello tim». Si escribe «greetme.sh tim smith», se mostrarán las palabras «hello tim smith».

Podría ser bueno para el script greetme.sh decir hola usando sólo el nombre de pila. Nadie dice «hola Gary Newell» cuando se encuentran conmigo, pero podrían decir «hola Gary».

Cambiemos el script para que sólo use el primer parámetro. Abre el script greetme.sh en nano escribiendo lo siguiente:

 nano greetme.sh 

Cambie el guión para que se lea como sigue:

 #!/bin/bashecho "hello $1" 

>

Guarde el script pulsando CTRL y O y luego salga pulsando CTRL y X.

Ejecute el script como se muestra a continuación (reemplace mi nombre por el suyo):

 sh greetme.sh gary newell 

Cuando ejecute el script simplemente dirá «hola Gary» (o con suerte «hola» y como sea que te llames.

El 1 después del símbolo $ básicamente dice al comando echo, use el primer parámetro. Si reemplazas el $1 por un $2, entonces mostraría «hello newell» (o cualquiera que sea tu apellido).

Por cierto, si reemplazas los $2 por $3 y ejecutas el script con sólo 2 parámetros, la salida sería simplemente «Hello».

Es posible mostrar y manejar el número de parámetros realmente introducidos y en los siguientes tutoriales mostraré cómo utilizar el recuento de parámetros con fines de validación.

Para mostrar el número de parámetros introducidos, abra el script greetme.sh (nano greetme.sh) y modifique el texto como sigue:

#!/bin/bashecho «you entered $# names «echo «hello $@»

Pulse CTRL y O para guardar el guión y CTRL y X para salir de nano.

El signo $# en la segunda línea muestra el número de parámetros introducidos.

Hasta ahora todo esto ha sido novedoso pero no muy útil. ¿Quién necesita un guión que simplemente muestre «hola»?

El uso real de las declaraciones de eco es proporcionar una salida verbosa y significativa para el usuario. Si usted puede imaginar que quiere hacer algo complicado que involucra un crujido de números y manipulación de archivos/carpetas, sería útil mostrar al usuario lo que está sucediendo en cada paso del camino.

Por el contrario, los parámetros de entrada hacen que su script sea interactivo. Sin parámetros de entrada necesitarías docenas de scripts haciendo cosas muy similares pero con nombres ligeramente diferentes.

Con todo esto en mente hay algunos otros parámetros de entrada útiles que es una buena idea saber y los incluiré todos en un fragmento de código.

Abra su script greetme.sh y modifíquelo de la siguiente manera:

#!/bin/bashecho «Nombre de archivo: $0 «echo «Process ID: $$»echo «—————————————«echo «you entered $# names «echo «hello $@»

Pulse CTRL y O para guardar el archivo y CTRL y X para salir.

Ahora ejecute el script (reemplace con su nombre).

 sh greetme.sh 

Esta vez el script muestra lo siguiente:

 Nombre del fichero: greetme.shProcess ID: 18595--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

El $0 en la primera línea del script muestra el nombre del script que está ejecutando. Note que es dólar cero y no dólar o.

El $$ en la segunda línea muestra el ID de proceso del script que está ejecutando. ¿Por qué es útil? Si está ejecutando un script en primer plano, puede cancelarlo simplemente pulsando CTRL y C. Si ejecutara el script en segundo plano y comenzara a reproducirse y a hacer lo mismo una y otra vez, o si empezara a causar daño a su sistema, tendría que matarlo.

Para matar un script que se ejecuta en segundo plano se necesita el ID de proceso del script. ¿No sería bueno que el script diera el id del proceso como parte de su salida? (sobre los comandos ps y kill)

Finalmente, antes de terminar con este tema, quería discutir a dónde va el resultado. Cada vez que el script se ha ejecutado hasta ahora, la salida se ha mostrado en la pantalla.

Es bastante común que la salida del script se escriba en un archivo de salida. Para ello, ejecute el script de la siguiente manera:

< sh greetme.sh gary> greetme.log

El símbolo> en el comando anterior envía el texto «hello gary» a un archivo llamado greetme.log.

Cada vez que se ejecuta el script con el símbolo> se sobrescribe el contenido del archivo de salida. Si prefiere agregar al archivo, reemplace el archivo>; con>>>.

Resumen

Ahora debería poder escribir texto en la pantalla y aceptar los parámetros de entrada.

TAMBIÉN TE INTERESA

Sage-Copilot

Sage Copilot: el software de recursos humanos número uno integra la IA Generativa

Son muchas las pymes que actualmente cuentan con el software de Sage para la gestión de los recursos humanos. Contabilidad, finanzas y nóminas, entre otras grandes áreas, son gestionadas por esta popular herramienta entre los negocios españoles e internacionales. La novedad más reciente es la integración de la IA Generativa que han desarrollado los técnicos

OPPO-Air-Glass-3

Esto va de gafas e IA: salen a la luz las OPPO Air Glass 3

No hay duda de que el tema central del Mobile World de este año es la inteligencia artificial. Pero en el evento barcelonés suele destacar por la presentación de nuevos dispositivos por parte de las marcas. Ya vimos lo sorprendentes que pueden llegar a ser las Apple Vision Pro… Ahora OPPO anuncia nuevas gafas en