Categorías
GNU-Linux Script

Crea y ejecuta tu primer script de Bash Shell

Cómo pasar argumentos a los scripts

Cómo pasar argumentos a los scripts de Bash

Hasta ahora, has aprendido cómo usar variables para hacer que tus scripts bash sean dinámicos y genéricos, para que respondan a varios datos y a diferentes entradas del usuario.

En esta guía, aprenderás cómo puedes pasar variables a un script bash desde la línea de comandos.

Pasar argumentos a un script de shell bash

El siguiente script contar_lineas.sh mostrará el número total de líneas que existen en cualquier archivo que el usuario introduzca:

#!/bin/bash

echo -n "Ingresa un nombre de archivo: "
read archivo
nlineas=$(wc -l < $archivo)

echo "Hay $nlineas lineas en $archivo"

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

Este script funciona bien; sin embargo, existe una alternativa mucho mejor.

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

./contar_lineas.sh /etc/passwd

El primer argumento bash (también conocido como parámetro posicional) puede ser accedido dentro de su script bash usando la variable $1.

Así que en el script contar_lineas.sh, puedes reemplazar la variable archivo por $1 de la siguiente manera:

#!/bin/bash

nlineas=$(wc -l < $1)
echo "Hay $nlineas lineas en $1"

Observa que también me he deshecho del comando de lectura y del primer echo, ya que no son necesarios.

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

./contar_lineas.sh    /etc/group
Hay 73 lineas en /etc/group

Pasar múltiples argumentos a un script de shell bash

Puedes pasar más de un argumento a tu script bash. En general, esta es la sintaxis para hacerlo:

script.sh arg1 arg2 arg3  …

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

En caso que te preguntes, la variable $0 contiene el nombre de tu script bash en caso que te lo estés preguntando.

Ahora podemos editar nuestro script contar_lineas.sh 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 "Hay $n1 lineas en $1"
echo "Hay $n2 lineas en $2"
echo "Hay $n3 lineas en $3"

Ahora puede ejecutar el script y pasarle tres archivos como argumentos:Como puedes ver, el script muestra 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.

Creatividad con los argumentos en el shell Bash

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

Algunos de ellos son un poco complicados ya que pueden tener una larga sintaxis o una larga serie de opciones que puedes utilizar.

Afortunadamente, puedes usar los argumentos de bash para convertir un comando difícil en una tarea bastante fácil.

Para demostrarlo, dale una mirada al siguiente script bash find.sh:

#!/bin/bash

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

Es un script muy sencillo que, sin embargo, puede resultar muy útil. Puede suministrar cualquier nombre de archivo como argumento al script y éste mostrará la ubicación de su archivo:Verás como ahora es mucho más fácil que escribir todo el comando find. Esta es una prueba de que puedes usar argumentos para convertir cualquier comando largo y complicado en Linux en un simple script bash.

Si te preguntas 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.

Consejo adicional: Variables especiales en el shell Bash

Bash tiene una gran cantidad de variables especiales incorporadas que son bastante útiles y están a tu disposición.

La siguiente tabla destaca las variables especiales incorporadas más comunes de Bash:

Variable Especial Descripción
$0 El nombre del script bash.
$1, $2…$n Los argumentos del script bash.
$$ El id del proceso del shell actual.
$# El número total de argumentos pasados al script.
$@ El valor de todos los argumentos pasados al script.
$? El estado de salida del último comando ejecutado.
$! El ID del proceso del último comando ejecutado.

Para ver estas variables especiales en acción; mira el siguiente script bash variables.sh:

#!/bin/bash

echo "Nombre del script: $0"
echo "Número total de argumentos: $#"
echo "Valores de todos los argumentos: $@"

Ahora puedes pasar los argumentos que quieras y ejecutar el script: