GNU/Linux >> Tutoriales Linux >  >> Linux

Bash Beginner Series #3:Pasando Argumentos a Bash Scripts

Los argumentos pueden ser útiles, ¡especialmente con Bash!

Hasta ahora, ha aprendido a usar variables para hacer que sus scripts de bash sean dinámicos y genéricos, de modo que respondan a varios datos y diferentes entradas de usuarios.

En este tutorial, aprenderá cómo puede pasar variables a scripts bash desde la línea de comandos.

Compre el libro electrónico 'Aprender Bash rápidamente'

Pasar argumento a un script de shell bash

El siguiente script count_lines.sh generará el número total de líneas que existen en cualquier archivo que ingrese el usuario:

#!/bin/bash

echo -n "Please enter a filename: "
read filename
nlines=$(wc -l < $filename)

echo "There are $nlines lines in $filename"

Por ejemplo, el usuario puede ingresar el archivo /etc/passwd y el script escupirá el número de líneas como resultado:

Este script funciona bien; sin embargo, ¡hay una alternativa mucho mejor!

En lugar de pedirle al usuario el nombre del archivo, podemos hacer que el usuario simplemente pase el nombre del archivo como argumento de la línea de comando mientras ejecuta el script de la siguiente manera:

./count_lines.sh /etc/passwd

Se puede acceder al primer argumento bash (también conocido como parámetro posicional) dentro de su script bash usando el $1 variables.

Entonces, en el script count_lines.sh, puede reemplazar la variable de nombre de archivo con $1 de la siguiente manera:

#!/bin/bash

nlines=$(wc -l < $1)
echo "There are $nlines lines in $1"

Tenga en cuenta que también me deshice de los comandos de lectura y primer eco, ya que ya no son necesarios.

Finalmente, puede ejecutar el script y pasar cualquier archivo como argumento:

./count_lines.sh    /etc/group
There are 73 lines in /etc/group

Pasar múltiples argumentos a un script de shell bash

Puede pasar más de un argumento a su script bash. En general, aquí está la sintaxis de pasar múltiples argumentos a cualquier script bash:

script.sh arg1 arg2 arg3  …

El segundo argumento será referenciado por $2 variable, el tercer argumento es referenciado por $3 , .. etc.

El $0 ¡la variable contiene el nombre de su script bash en caso de que se lo pregunte!

Ahora podemos editar nuestro count_lines.sh script bash para que pueda contar las líneas de más de un archivo:

#!/bin/bash

n1=$(wc -l < $1)
n2=$(wc -l < $2)
n3=$(wc -l < $3)

echo "There are $n1 lines in $1"
echo "There are $n2 lines in $2"
echo "There are $n3 lines in $3"

Ahora puede ejecutar el script y pasar tres archivos como argumentos al script bash:

Como puede ver, el script genera el número de líneas de cada uno de los tres archivos; y no hace falta decir que el orden de los argumentos importa, por supuesto.

Ser creativo con argumentos en Bash shell

Hay un montón de comandos de Linux por ahí.

Algunos de ellos son un poco complicados, ya que pueden tener una sintaxis larga o una gran variedad de opciones que puede usar.

¡Afortunadamente, puede usar argumentos bash para convertir un comando difícil en una tarea bastante fácil!

Para demostrarlo, eche un vistazo al siguiente find.sh secuencia de comandos bash:

#!/bin/bash

find / -iname $1 2> /dev/null

¡Es un script muy simple que, sin embargo, puede resultar muy útil! Puede proporcionar cualquier nombre de archivo como argumento para el script y mostrará la ubicación de su archivo:

¡Ves cómo esto ahora es mucho más fácil que escribir todo el comando de búsqueda! Esta es una prueba de que puede usar argumentos para convertir cualquier comando largo y complicado en Linux en un simple script bash.

Si te estás preguntando sobre el 2> /dev/null , significa que cualquier mensaje de error (como que no se puede acceder al archivo) no se mostrará en la pantalla. Sugiero leer sobre la redirección de stderr en Linux para obtener más conocimiento sobre este tema.

Consejo extra:Variables especiales en Bash shell

Bash tiene muchas variables especiales integradas que son muy útiles y están disponibles a su disposición.

La siguiente tabla destaca las variables bash integradas especiales más comunes:

Para ver estas variables especiales en acción; echa un vistazo a las siguientes variables.sh secuencia de comandos bash:

#!/bin/bash

echo "Name of the script: $0"
echo "Total number of arguments: $#"
echo "Values of all the arguments: [email protected]"

Ahora puede pasar los argumentos que desee y ejecutar el script:

Muy bien, esto nos lleva al final de este capítulo. Espero que ahora te des cuenta de lo poderosos y útiles que pueden ser los argumentos bash.

Necesita algo de práctica, descargue este PDF y practique cómo pasar argumentos a scripts bash con desafíos de scripting simples. También se incluyen sus soluciones.

Bash Capítulo 3 Preguntas de práctica Problemas y su solución para practicar lo que acabas de aprender en este capítulo Bash-Chapter-3-Practice-Questions-Linux-Handbook.pdf30 KB

Después de eso, eche un vistazo al próximo capítulo donde le mostraré que puede crear y utilizar arreglos en sus scripts de bash.


Linux
  1. Manejo de errores en scripts Bash

  2. ¿Usar la extensión .sh o .bash para scripts Bash?

  3. Bash Beginner Series #9:Uso de funciones en Bash

  4. Bash Beginner Series #8:Bucles en Bash

  5. Ejecute el comando bash en la canalización de jenkins

Bash Beginner Series #2:Comprender las variables en Bash Shell Scripting

Bash Beginner Series #1:Cree y ejecute su primer script de Bash Shell

Bash Beginner Series #5:Uso de operadores aritméticos en Bash Scripting

Bash Beginner Series #4:Uso de arreglos en Bash

Bash Beginner Series #6:Operaciones de cadenas en Bash

Bash Beginner Series #10:Automatización con Bash

    Variable especial Descripción
    $0 El nombre del script bash.
    $1, $2...$n Los argumentos del script bash.
    $$ La identificación del proceso del shell actual.
    $# El número total de argumentos pasados ​​al script.
    [email protected] El valor de todos los argumentos pasados ​​al script.
    $? El estado de salida del último comando ejecutado.
    $! La identificación del proceso del último comando ejecutado.