¡El tiempo cambia, y también las variables!
Debes haber jugado bastante con las variables si hiciste algún tipo de programación.
Si nunca antes trabajó con variables, puede pensar en ellas como un contenedor que almacena información que puede variar con el tiempo.
Las variables siempre son útiles al escribir un script bash y en este tutorial aprenderá a usar variables en sus scripts bash.
Usando variables en scripts de shell bash
En el último tutorial de esta serie, aprendiste a escribir un programa hola mundo en bash.
#! /bin/bash
echo 'Hello, World!'
Ese fue un simple guión de Hello World. Hagamos que sea un mejor Hola Mundo.
Mejoremos este script usando variables de shell para que salude a los usuarios con sus nombres. Edite su secuencia de comandos hello.sh y use el comando de lectura para obtener información del usuario:
#! /bin/bash
echo "What's your name, stranger?"
read name
echo "Hello, $name"
Ahora, si ejecuta su script hello.sh; le pedirá su nombre y luego lo saludará con el nombre que le proporcione:
[email protected]:~/scripts$ ./hello.sh
What's your name, stranger?
Elliot
Hello, Elliot
En el ejemplo anterior, ingresé Elliot como mi nombre y luego el guión me saludó con "Hola, Elliot". Eso es definitivamente mucho mejor que un programa genérico de "Hola, mundo". ¿No estás de acuerdo?
Explicación paso a paso del script de shell anterior
Ahora repasemos el guión línea por línea aquí para asegurarnos de que entiendes todo.
Primero incluí la línea shebang para indicar explícitamente que vamos a usar bash shell para ejecutar este script.
#!/bin/bash
A continuación, le pido al usuario que ingrese su nombre:
echo "What's your name, stranger?"
Eso es solo un simple comando de eco para imprimir una línea en la terminal; bastante autoexplicativo.
Ahora, aquí está la línea donde sucede toda la magia:
read name
Aquí, utilicé el comando de lectura para transferir el control del script en ejecución al usuario, de modo que el usuario pueda ingresar un nombre y luego almacenar lo que haya ingresado, en la variable 'nombre'.
Finalmente, el script saluda al usuario con su nombre:
echo “Hello, $name”
Observe aquí, debe preceder el nombre de la variable con un signo de dólar para obtener el valor almacenado en el nombre de la variable. Si omite el signo de dólar, en su lugar se mostrará "Hola, nombre".
Este signo de dólar se conoce como el operador de desreferencia en scripts bash.
¿Enteros, cadenas o caracteres? ¿Cómo crear diferentes tipos de datos variables en bash shell?
Juguemos un poco más con las variables.
Puede utilizar el signo igual para crear y establecer el valor de una variable. Por ejemplo, la siguiente línea creará una variable llamada edad y establecerá su valor en 27.
age=27
Una vez que haya creado la variable de edad, puede cambiar su valor tanto como desee.
age=3
El comando anterior cambia el valor de la variable edad de 27 a 3. ¡Ojalá los tiempos retrocedan, te escucho decir!
Las variables pueden contener diferentes tipos de datos; las variables pueden almacenar números enteros, cadenas y caracteres.
letter=’c’
color=’blue’
year=2020
Variables constantes en bash shell
¡También puedes crear una variable constante, es decir, una variable cuyo valor nunca cambiará! Esto se puede hacer anteponiendo el nombre de su variable con readonly
comando:
readonly PI=3.14159
El comando anterior creará una variable constante PI y establecerá su valor en 3.14159. Ahora, no puede cambiar el valor de la variable constante, si lo intenta, obtendrá un error:
bash: PI: readonly variable
Como puede ver, solo puede leer el valor de una variable constante, pero nunca puede cambiar su valor después de crearla.
Sustituciones de comandos
La capacidad de almacenar la salida de un comando en una variable se denomina sustitución de comando y es, con mucho, una de las características más sorprendentes de bash.
El comando de fecha es un ejemplo clásico para demostrar la sustitución de comandos:
TODAY=$(date)
El comando anterior almacenará la salida de la fecha del comando en la variable HOY. Observe cómo debe encerrar el comando de fecha entre un par de paréntesis y un signo de dólar (a la izquierda).
Alternativamente, también puede encerrar el comando entre un par de comillas invertidas:
TODAY=`date`
El método de comillas inversas es la forma antigua de realizar la sustitución de comandos, por lo que recomiendo encarecidamente que lo evite y siga con el enfoque moderno:
variable=$(command)
Antes de ir, intente convertir el script Hello World en un script inteligente HelloWorld
Ahora que acaba de aprender cómo hacer la sustitución de comandos, ¡tendría sentido visitar el script Hello World por última vez para perfeccionarlo!
La última vez, le pidió al usuario que ingresara su nombre para que el script lo salude; esta vez, no vas a preguntar, ¡tu script ya lo sabe!
Use el comando whoami junto con la sustitución de comandos para saludar a quien ejecute el script:
#! /bin/bash
echo "Hello, $(whoami)"
Como puede ver, ¡solo necesitaba dos líneas! Ahora ejecute el script:
./hello.sh
¡Funciona de maravilla!
Muy bien, esto nos lleva al final de este tutorial. Puedes practicar lo que acabas de aprender resolviendo los problemas y consultar sus soluciones si te quedas atascado o necesitas una pista.
Bash Capítulo 2 Preguntas de práctica Problemas y su solución para practicar lo que acabas de aprender en este capítulo Bash-Chapter-2-Practice-Questions-Linux-Handbook.pdf29 KB
Espero que hayas disfrutado trabajando con variables de shell tanto como yo. Consulte el siguiente capítulo de esta serie, donde analizo cómo puede pasar argumentos a sus scripts de shell.