Bienvenido a la segunda parte de la serie Beginning Guide To BASH, que es única porque es el único tutorial BASH escrito por un principiante para principiantes.
Los lectores de esta guía aumentarán su conocimiento a medida que yo lo haga, y espero que para el final de todo podamos escribir algunos scripts bastante inteligentes.
La semana pasada cubrí la creación de su primer guión que simplemente mostraba las palabras "Hola mundo". Cubre temas como editores de texto, cómo abrir una ventana de terminal, dónde colocar sus scripts, cómo mostrar las palabras "Hola mundo" y algunos puntos más finos en caracteres de escape como 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 saltan a un nivel bastante bajo y tal vez proporcionan demasiada información.
¿Qué es un parámetro?
En el script "Hello World" del último tutorial, todo era muy estático. El guión realmente no hizo mucho en absoluto.
¿Cómo podríamos mejorar el guión de "Hello World"?
¿Qué pasa con un script que saluda a la persona que lo ejecuta? En lugar de decir "Hola mundo" dirá "Hola Gary", "Hola Tim" o "Hola Dolly".
Sin la capacidad de aceptar parámetros de entrada, tendríamos que escribir tres scripts "hellogary.sh", "hellotim.sh" y "hellodolly.sh".
Al permitir que nuestro script lea los parámetros de entrada, podemos usar un script para saludar a cualquiera.
Para hacer esto, abra una ventana de terminal (CTRL + ALT + T) y navegue a su carpeta de scripts escribiendo lo siguiente: (acerca del comando cd)
guiones de cd
Cree un nuevo script llamado greetme.sh escribiendo lo siguiente: (acerca del comando táctil)
toque greetme.sh
Abra el script en su editor favorito escribiendo lo siguiente: (acerca del comando nano)
nano greetme.sh
Ingrese el siguiente texto dentro de nano:
#! / bin / bash echo "hello $ @"
Presione CTRL y O para guardar el archivo y luego CTRL y X para cerrar el archivo.
Para ejecutar el script ingrese lo siguiente en la línea de comando que reemplaza con su nombre.
sh greetme.sh
Si ejecuto el script con mi nombre, muestra las palabras "Hola Gary".
La primera línea tiene la línea #! / Bin / bash que se usa para identificar el archivo como un script de bash.
La segunda línea usa la declaración de eco para repetir la palabra hola y luego está la extraña notación $ @. (sobre el comando echo)
El $ @ se expande para mostrar todos los parámetros que se ingresaron junto con el nombre del script. Así que si escribes "sh greetme.sh tim" se mostrarán las palabras "hola tim". Si escribió "greetme.sh tim smith", se mostrarán las palabras "hello tim smith".
Puede ser bueno que el script greetme.sh diga hola usando solo el primer nombre. Nadie dice "hola Gary Newell" cuando se encuentran conmigo, aunque podrían decir "Hola Gary".
Cambiemos el script para que solo use el primer parámetro. Abra el script greetme.sh en nano escribiendo lo siguiente:
nano greetme.sh
Cambie el script para que se lea como sigue:
#! / bin / bash echo "hello $ 1"
Guarde el script presionando CTRL y O y luego salga presionando CTRL y X.
Ejecute el script como se muestra a continuación (reemplace mi nombre con el suyo):
sh greetme.sh gary newell
Cuando ejecute el script, simplemente dirá "hello gary" (o, con suerte, "hola" y cualquiera que sea su nombre).
El 1 después del símbolo $ básicamente le dice al comando echo, use el primer parámetro. Si reemplaza el $ 1 por $ 2, se mostrará "hola newell" (o cualquiera que sea su apellido).
Incidentalmente, si reemplaza los $ 2 con $ 3 y ejecuta el script con solo 2 parámetros, la salida sería simplemente "Hola".
Es posible mostrar y manejar el número de parámetros realmente ingresados y en tutoriales posteriores mostraré cómo usar el conteo de parámetros para propósitos de validación.
Para mostrar el número de parámetros ingresados, abra el script greetme.sh (nano greetme.sh) y modifique el texto de la siguiente manera:
#! / bin / bash echo "ingresaste $ # names" echo "hello $ @"
Presione CTRL y O para guardar la secuencia de comandos y CTRL y X para salir de nano.
El $ # en la segunda línea muestra el número de parámetros ingresados.
Hasta ahora todo esto ha sido novedoso pero no muy útil. ¿Quién necesita un script que simplemente muestre "hola"?
El uso real de las declaraciones de eco es proporcionar resultados detallados y significativos para el usuario. Si puede imaginar que quiere hacer algo complicado, lo que implica un grave procesamiento de números y la 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 los parámetros de entrada, necesitarías docenas de scripts, todos 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é en un fragmento de código.
Abra su script greetme.sh y modifíquelo de la siguiente manera:
#! / bin / bash echo "Nombre del archivo: $ 0" echo "ID del proceso: $$" echo "---------------------------- --- "echo" ingresaste $ # nombres "echo" hello $ @ "
Presione CTRL y O para guardar el archivo y CTRL y X para salir.
Ahora ejecuta el script (reemplaza con tu nombre).
sh greetme.sh
Esta vez el script muestra lo siguiente:
Nombre de archivo: greetme.sh ID de proceso: 18595 ------------------------------ ingresaste 2 nombres hello gary newell
El $ 0 en la primera línea del script muestra el nombre del script que está ejecutando.Tenga en cuenta que es dólar cero y no dólar o.
El $$ en la segunda línea muestra la identificación del proceso del script que está ejecutando. ¿Por qué es esto útil? Si está ejecutando una secuencia de comandos en primer plano, puede cancelarla simplemente presionando CTRL y C. Si ejecutó la secuencia de comandos en segundo plano y comenzó a hacer un bucle y hacer lo mismo una y otra vez o comenzó a causar daños a su sistema que necesitaría para matarlo
Para eliminar un script que se ejecuta en segundo plano, necesita el ID de proceso del script. ¿No sería bueno si la secuencia de comandos proporcionara la identificación del proceso como parte de su salida? (sobre los comandos ps y kill)
Finalmente, antes de terminar con este tema, quería discutir acerca de a dónde va la salida. Cada vez que el script se ha ejecutado hasta ahora, el resultado se ha mostrado en la pantalla.
Es bastante común que la salida del script se escriba en un archivo de salida. Para hacer esto ejecuta tu script de la siguiente manera:
sh greetme.sh gary> greetme.log
El símbolo> en el comando anterior genera el texto "hello gary" en un archivo llamado greetme.log.
Cada vez que ejecuta la secuencia de comandos con el símbolo> sobrescribe el contenido del archivo de salida. Si prefiere adjuntar al archivo, reemplace el> con >>.
Resumen
Ahora debería poder escribir texto en la pantalla y aceptar parámetros de entrada.