Comprobar si existe un argumento de entrada en Bash
-
Utilice
$#
para comprobar si existe un argumento de entrada en Bash -
Use
$1
para verificar si existe un argumento de entrada en Bash
Cuando creamos scripts Bash, es posible que deseemos tomar argumentos para usar dentro de nuestros scripts para ejecutarlos con éxito. Por lo tanto, necesitamos crear una secuencia de comandos para verificar la cantidad de argumentos de entrada que un usuario usa con la secuencia de comandos.
Todo esto evita comportamientos inesperados cuando un usuario no pasa los argumentos requeridos al usar el script o el comando, y luego podemos pasar un mensaje de error que le dice al usuario que no ha usado la cantidad requerida de argumentos.
Este artículo le mostrará cómo verificar si existe un argumento de entrada o la cantidad de argumentos existentes.
Utilice $#
para comprobar si existe un argumento de entrada en Bash
Dentro de Bash, una variable especial, $#
, contiene el argumento de entrada. Con $#
, puede verificar cuántos argumentos de entrada se han pasado a su script Bash.
Un simple script de Bash le mostrará lo que contiene esta variable $#
cuando se pasa sin argumentos o cuando se pasa con dos argumentos.
#!/bin/bash
echo "The number of input arguments passed to this script: "
echo $#
Ejecutemos el script sin argumentos de entrada:
$ ./script.sh
La salida del terminal se muestra a continuación:
The number of input arguments passed to this script:
0
Ahora, pasemos dos argumentos al mismo script:
$ ./script.sh one two
La salida del script se convierte en la siguiente:
The number of input arguments passed to this script:
2
Ahora, podemos usar $#
y una declaración condicional que verifique si $#
es igual a cero (es decir, sin argumentos de entrada) dentro de nuestro script para salir cuando sea true
. Si $#
es mayor que 0, la condición se vuelve falsa
y se ejecuta la parte else
de la sentencia condicional.
#!/bin/bash
if [ $# -eq 0 ]
then
echo "No input arguments exist"
exit 1
else
echo "The number of input arguments passed:"
echo $#
fi
Ejecutemos el script usando el siguiente comando sin argumentos:
$ ./script.sh
La salida del código:
No input arguments exist
Ahora, ejecutemos un comando de script diferente con argumentos:
$ ./script.sh one two
La salida del código es diferente porque la verificación de la condición equivale a false
:
The number of input arguments passed:
2
Aparte de eso, podemos usar otra variable especial que usa el $[número]
para acceder al argumento de entrada. Estos son parámetros posicionales que podemos usar dentro de Bash.
Si sabemos que obtendremos tres variables o lo hemos comprobado, podemos acceder a las tres variables usando el código a continuación.
#!/bin/bash
echo "The input arguments are:"
echo $1 $2 $3
La salida del código, cuando se pasa con tres argumentos, será la siguiente:
The input arguments are:
one two three
Use $1
para verificar si existe un argumento de entrada en Bash
Recuerde los parámetros posicionales que discutimos en la sección anterior. Podemos usar el primero, $1
, para comprobar si se ha pasado algún argumento de entrada, ya que si no hay ningún argumento de entrada, no puede haber ningún valor dentro del parámetro posicional, $1
.
Por lo tanto, podemos usar la declaración if-else
donde la expresión de condición verifica si hay un valor dentro del parámetro posicional, $1
. Sin embargo, si hay un valor, repite el número de argumentos de entrada y el primer argumento usando los parámetros posicionales.
#!/bin/bash
if [ -z "$1" ]
then
echo "Please, pass an argument"
exit 1
else
echo "The number of input arguments are"
echo $#
echo "The first one is"
echo $1
fi
Ejecutemos el código sin argumentos:
$ ./script.sh
La salida del script:
Please, pass an argument
Ahora, vamos a ejecutarlo con algunos argumentos:
$ ./script.sh delft stack blog
La salida del código:
The number of input arguments are
3
The first one is
delft
Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.
LinkedIn