¿Cómo Asignar y Reasignar Variables en Bash?

ShellBeginner
Practicar Ahora

Introducción

Este tutorial te guiará a través del proceso de asignación y reasignación de variables en Bash, el popular lenguaje de scripting de shell. Las variables son bloques de construcción fundamentales en el scripting de Bash que te permiten almacenar y manipular datos. En este laboratorio práctico, aprenderás a declarar variables, asignarles valores y usarlas en comandos y scripts. Al final de este tutorial, tendrás una sólida comprensión de cómo trabajar eficazmente con variables en Bash, lo que te permitirá escribir scripts más potentes y flexibles.

Creación y Asignación de Variables Bash

En Bash, las variables te permiten almacenar datos a los que se puede acceder y modificar más adelante en tu script. Comencemos creando una variable simple y asignándole un valor.

Abre una nueva terminal en el entorno LabEx. Deberías estar en el directorio /home/labex/project.

Para asignar un valor a una variable en Bash, usa la siguiente sintaxis:

variable_name=value

Ten en cuenta que no debe haber espacios alrededor del signo igual.

Creemos nuestra primera variable:

  1. En la terminal, escribe el siguiente comando y presiona Enter:
name="John"
  1. Para mostrar el valor de la variable, usa el comando echo con el nombre de la variable precedido por un signo de dólar ($):
echo $name

Deberías ver la siguiente salida:

John
  1. También puedes usar comillas dobles alrededor del nombre de la variable:
echo "My name is $name"

Salida:

My name is John
  1. Para reasignar un nuevo valor a la misma variable, simplemente usa el operador de asignación (=) de nuevo:
name="Alice"
echo "My name is $name"

Salida:

My name is Alice

Reglas de Nomenclatura de Variables

Al crear variables en Bash, sigue estas convenciones de nomenclatura:

  • Los nombres de las variables pueden contener letras, números y guiones bajos (underscores)
  • Los nombres de las variables deben comenzar con una letra o un guion bajo
  • Los nombres de las variables distinguen entre mayúsculas y minúsculas (case-sensitive)
  • No se permiten espacios en los nombres de las variables

Creemos un archivo para practicar con variables. En el WebIDE, crea un nuevo archivo llamado variables.sh en el directorio del proyecto:

  1. Haz clic en el icono "New File" en el IDE
  2. Nombra el archivo variables.sh
  3. Agrega el siguiente código al archivo:
#!/bin/bash

## Asignando variables
first_name="John"
last_name="Doe"
age=25

## Mostrando variables
echo "First name: $first_name"
echo "Last name: $last_name"
echo "Age: $age"

## Reasignando variables
first_name="Jane"
echo "Updated first name: $first_name"
  1. Guarda el archivo presionando Ctrl+S o haciendo clic en File → Save

  2. Haz que el script sea ejecutable ejecutando el siguiente comando en la terminal:

chmod +x variables.sh
  1. Ejecuta el script con:
./variables.sh

Deberías ver la siguiente salida:

First name: John
Last name: Doe
Age: 25
Updated first name: Jane

Esto demuestra cómo crear variables, asignarles valores y reasignar nuevos valores.

Trabajando con Valores de Variables y Operaciones de Cadenas

En este paso, exploraremos diferentes formas de trabajar con valores de variables en Bash, incluyendo operaciones de cadenas y cálculos aritméticos.

Operaciones de Cadenas

Bash proporciona varias formas de manipular valores de cadenas almacenados en variables.

  1. Crea un nuevo archivo llamado string_operations.sh en el directorio del proyecto:
#!/bin/bash

## String concatenation
greeting="Hello"
name="World"
message="$greeting $name"
echo $message

## String length
text="Welcome to Bash scripting"
length=${#text}
echo "The length of '$text' is $length characters"

## Extracting substrings
substring=${text:0:7}
echo "Substring: $substring"

## Converting to uppercase and lowercase
uppercase=${text^^}
lowercase=${text,,}
echo "Uppercase: $uppercase"
echo "Lowercase: $lowercase"
  1. Guarda el archivo y hazlo ejecutable:
chmod +x string_operations.sh
  1. Ejecuta el script:
./string_operations.sh

Deberías ver una salida similar a:

Hello World
The length of 'Welcome to Bash scripting' is 25 characters
Substring: Welcome
Uppercase: WELCOME TO BASH SCRIPTING
Lowercase: welcome to bash scripting

Operaciones Aritméticas

Bash también te permite realizar operaciones aritméticas con variables.

  1. Crea un nuevo archivo llamado arithmetic_operations.sh en el directorio del proyecto:
#!/bin/bash

## Assigning numeric values
x=5
y=3

## Basic arithmetic operations
sum=$((x + y))
difference=$((x - y))
product=$((x * y))
quotient=$((x / y))
remainder=$((x % y))

## Display results
echo "x = $x, y = $y"
echo "Sum: $x + $y = $sum"
echo "Difference: $x - $y = $difference"
echo "Product: $x * $y = $product"
echo "Quotient: $x / $y = $quotient"
echo "Remainder: $x % $y = $remainder"

## Increment and decrement
echo "Initial value of x: $x"
x=$((x + 1))
echo "After increment: $x"
x=$((x - 1))
echo "After decrement: $x"

## Compound assignment operators
x+=5
echo "After x+=5: $x"
x-=2
echo "After x-=2: $x"
  1. Guarda el archivo y hazlo ejecutable:
chmod +x arithmetic_operations.sh
  1. Ejecuta el script:
./arithmetic_operations.sh

Deberías ver una salida similar a:

x = 5, y = 3
Sum: 5 + 3 = 8
Difference: 5 - 3 = 2
Product: 5 * 3 = 15
Quotient: 5 / 3 = 1
Remainder: 5 % 3 = 2
Initial value of x: 5
After increment: 6
After decrement: 5
After x+=5: 10
After x-=2: 8

Lectura de Entrada del Usuario en Variables

Las variables también pueden almacenar la entrada proporcionada por los usuarios. Creemos un script que solicite la entrada del usuario:

  1. Crea un archivo llamado user_input.sh:
#!/bin/bash

## Prompt the user for their name
echo "What is your name?"
read user_name

## Prompt the user for their age
echo "How old are you?"
read user_age

## Display the information
echo "Hello, $user_name! You are $user_age years old."

## Calculate birth year (approximate)
current_year=$(date +%Y)
birth_year=$((current_year - user_age))
echo "You were likely born in $birth_year."
  1. Guarda el archivo y hazlo ejecutable:
chmod +x user_input.sh
  1. Ejecuta el script:
./user_input.sh
  1. Cuando se te solicite, ingresa tu nombre y edad. El script mostrará un saludo y calculará tu año de nacimiento aproximado.

Este paso te ha mostrado cómo realizar varias operaciones con variables, incluyendo la manipulación de cadenas, cálculos aritméticos y la lectura de la entrada del usuario.

Uso de Variables en Scripts y Comandos

En este paso, exploraremos cómo usar variables de manera efectiva en scripts y comandos de Bash. Crearemos un script práctico que demuestra el uso de variables en varios escenarios.

Creación de un Script Básico con Variables

Creemos un script que calcule el costo total de los artículos en un carrito de compras:

  1. Crea un nuevo archivo llamado shopping_cart.sh en el directorio del proyecto:
#!/bin/bash

## Initialize variables for items and their prices
item1="Laptop"
price1=999
item2="Headphones"
price2=149
item3="Mouse"
price3=25

## Calculate the total price
total=$((price1 + price2 + price3))

## Display the shopping cart
echo "Shopping Cart:"
echo "-------------"
echo "$item1: \$$price1"
echo "$item2: \$$price2"
echo "$item3: \$$price3"
echo "-------------"
echo "Total: \$$total"

## Apply a discount if the total is over $1000
discount_threshold=1000
discount_rate=10

if [ $total -gt $discount_threshold ]; then
  discount_amount=$((total * discount_rate / 100))
  discounted_total=$((total - discount_amount))
  echo "Discount (${discount_rate}%): -\$$discount_amount"
  echo "Final Total: \$$discounted_total"
fi
  1. Guarda el archivo y hazlo ejecutable:
chmod +x shopping_cart.sh
  1. Ejecuta el script:
./shopping_cart.sh

Deberías ver la siguiente salida:

Shopping Cart:
-------------
Laptop: $999
Headphones: $149
Mouse: $25
-------------
Total: $1173
Discount (10%): -$117
Final Total: $1056

Uso de Variables con Sustitución de Comandos

La sustitución de comandos te permite capturar la salida de un comando y almacenarla en una variable. Creemos un script que demuestre esto:

  1. Crea un nuevo archivo llamado system_info.sh:
#!/bin/bash

## Get current date and time
current_date=$(date +"%Y-%m-%d")
current_time=$(date +"%H:%M:%S")

## Get system information
hostname=$(hostname)
os_type=$(uname -s)
kernel_version=$(uname -r)
uptime_info=$(uptime -p)
memory_free=$(free -h | awk '/^Mem:/ {print $4}')
disk_free=$(df -h / | awk 'NR==2 {print $4}')

## Display the information
echo "System Information Report"
echo "========================="
echo "Date: $current_date"
echo "Time: $current_time"
echo "Hostname: $hostname"
echo "OS Type: $os_type"
echo "Kernel Version: $kernel_version"
echo "Uptime: $uptime_info"
echo "Free Memory: $memory_free"
echo "Free Disk Space: $disk_free"
  1. Guarda el archivo y hazlo ejecutable:
chmod +x system_info.sh
  1. Ejecuta el script:
./system_info.sh

Deberías ver una salida similar a la siguiente (con valores específicos de tu sistema):

System Information Report
=========================
Date: 2023-11-20
Time: 14:30:25
Hostname: labex
OS Type: Linux
Kernel Version: 5.15.0-1015-aws
Uptime: up 2 hours, 15 minutes
Free Memory: 1.2Gi
Free Disk Space: 15G

Uso de Variables en Bucles

Las variables son particularmente útiles en bucles. Creemos un script que demuestre esto:

  1. Crea un nuevo archivo llamado countdown.sh:
#!/bin/bash

## Get countdown start value from user
echo "Enter a number to start countdown:"
read count

## Validate that input is a number
if [[ ! $count =~ ^[0-9]+$ ]]; then
  echo "Error: Please enter a valid number"
  exit 1
fi

## Perform countdown
echo "Starting countdown from $count:"
while [ $count -gt 0 ]; do
  echo $count
  count=$((count - 1))
  sleep 1
done

echo "Blast off!"
  1. Guarda el archivo y hazlo ejecutable:
chmod +x countdown.sh
  1. Ejecuta el script:
./countdown.sh
  1. Ingresa un número pequeño (como 5) cuando se te solicite.

El script contará hacia atrás desde el número que ingresaste, imprimiendo cada número y luego "Blast off!" al final.

Estos ejemplos demuestran cómo se pueden usar las variables en diferentes contextos dentro de los scripts de Bash, haciéndolos más dinámicos y flexibles.

Alcance de las Variables y Variables Especiales

En este paso final, exploraremos el alcance de las variables en Bash y aprenderemos sobre las variables especiales que Bash proporciona.

Comprender el Alcance de las Variables

En Bash, las variables pueden tener diferentes alcances, que determinan dónde se puede acceder a ellas:

  1. Variables globales: Son accesibles en todo el script.
  2. Variables locales: Son accesibles solo dentro de una función o bloque específico.

Creemos un script para demostrar el alcance de las variables:

  1. Crea un nuevo archivo llamado variable_scope.sh:
#!/bin/bash

## Global variable
global_var="I am a global variable"

## Function that demonstrates variable scope
demo_scope() {
  ## Local variable
  local local_var="I am a local variable"

  ## Access global variable
  echo "Inside function: global_var = $global_var"

  ## Access local variable
  echo "Inside function: local_var = $local_var"

  ## Modify global variable
  global_var="Global variable modified"
}

## Main script
echo "Before function call: global_var = $global_var"

## This will fail because local_var doesn't exist yet
echo "Before function call: local_var = $local_var"

## Call the function
demo_scope

## After function call
echo "After function call: global_var = $global_var"

## This will fail because local_var is only accessible within the function
echo "After function call: local_var = $local_var"
  1. Guarda el archivo y hazlo ejecutable:
chmod +x variable_scope.sh
  1. Ejecuta el script:
./variable_scope.sh

Deberías ver una salida similar a:

Before function call: global_var = I am a global variable
Before function call: local_var =
Inside function: global_var = I am a global variable
Inside function: local_var = I am a local variable
After function call: global_var = Global variable modified
After function call: local_var =

Observa que:

  • La variable global global_var es accesible tanto dentro como fuera de la función.
  • La variable local local_var solo es accesible dentro de la función.
  • Los cambios en la variable global persisten después de que la función termina.

Trabajando con Variables Especiales

Bash proporciona varias variables especiales que contienen información específica. Exploremos algunas de ellas:

  1. Crea un nuevo archivo llamado special_variables.sh:
#!/bin/bash

## Special variables demonstration
echo "Script name: $0"
echo "Process ID: $$"
echo "Number of arguments: $#"
echo "All arguments: $@"
echo "Exit status of last command: $?"
echo "Current user: $USER"
echo "Current hostname: $HOSTNAME"
echo "Random number: $RANDOM"

## Function to demonstrate positional parameters
show_params() {
  echo "Function received $## parameters"
  echo "Parameter 1: $1"
  echo "Parameter 2: $2"
  echo "Parameter 3: $3"
}

## Call the function with parameters
echo -e "\nCalling function with parameters:"
show_params apple banana cherry

## Demonstrate positional parameters to the script
echo -e "\nScript positional parameters:"
echo "Parameter 1: $1"
echo "Parameter 2: $2"
echo "Parameter 3: $3"
  1. Guarda el archivo y hazlo ejecutable:
chmod +x special_variables.sh
  1. Ejecuta el script con algunos argumentos:
./special_variables.sh arg1 arg2 arg3

Deberías ver una salida similar a:

Script name: ./special_variables.sh
Process ID: 12345
Number of arguments: 3
All arguments: arg1 arg2 arg3
Exit status of last command: 0
Current user: labex
Current hostname: labex
Random number: 23456

Calling function with parameters:
Function received 3 parameters
Parameter 1: apple
Parameter 2: banana
Parameter 3: cherry

Script positional parameters:
Parameter 1: arg1
Parameter 2: arg2
Parameter 3: arg3

Variables de Entorno

Las variables de entorno son variables especiales que afectan el comportamiento del shell y los programas. Creemos un script para explorarlas:

  1. Crea un nuevo archivo llamado environment_variables.sh:
#!/bin/bash

## Display common environment variables
echo "HOME directory: $HOME"
echo "Current user: $USER"
echo "Shell: $SHELL"
echo "Path: $PATH"
echo "Current working directory: $PWD"
echo "Terminal: $TERM"
echo "Language: $LANG"

## Creating and exporting a new environment variable
echo -e "\nCreating a new environment variable:"
MY_VAR="Hello from environment variable"
export MY_VAR
echo "MY_VAR = $MY_VAR"

## Demonstrate that child processes inherit environment variables
echo -e "\nAccessing environment variable from a child process:"
bash -c 'echo "Child process sees MY_VAR = $MY_VAR"'

## Remove the environment variable
echo -e "\nRemoving the environment variable:"
unset MY_VAR
echo "MY_VAR = $MY_VAR (should be empty)"
  1. Guarda el archivo y hazlo ejecutable:
chmod +x environment_variables.sh
  1. Ejecuta el script:
./environment_variables.sh

Deberías ver una salida que muestra varias variables de entorno y demuestra cómo se pueden crear, acceder y eliminar.

Este paso te ha mostrado cómo funciona el alcance de las variables en Bash y te ha presentado las variables especiales que proporcionan información útil dentro de tus scripts.

Resumen

En este laboratorio, has aprendido los fundamentos para trabajar con variables en la creación de scripts de Bash. Has adquirido experiencia práctica con:

  • Creación y asignación de valores a variables
  • Trabajar con operaciones de cadenas y cálculos aritméticos
  • Usar variables en scripts y comandos
  • Comprender el alcance de las variables y trabajar con variables especiales

Estas habilidades forman la base de la creación de scripts de Bash y te permitirán escribir scripts más sofisticados y potentes. Las variables son una herramienta esencial para hacer que tus scripts sean dinámicos y reutilizables, permitiéndoles adaptarse a diferentes entradas y escenarios.

A medida que continúas tu viaje en la creación de scripts de Bash, recuerda estos puntos clave:

  • Siempre elige nombres de variables descriptivos
  • Ten en cuenta el alcance de las variables al escribir funciones
  • Usa variables especiales para acceder a información útil dentro de tus scripts
  • Aprovecha las variables de entorno para la configuración y personalización

Con estas habilidades, ahora estás bien equipado para crear scripts de Bash más complejos para automatizar tareas y administrar tu sistema.