3. Variables, Parámetros y Entrada del Usuario

Gracias a las variables y a la entrada de usuario, los scripts dejan de ser estáticos y pueden reaccionar según datos dinámicos.


1. Variables en Bash

Una variable es un nombre que almacena un valor. En Bash no se declaran tipos (no hay enteros, strings, booleanos, etc.). Todo se trata como texto y el tipo se deduce según el uso.

Para crear una variable:





variable=valor

No se debe dejar espacio alrededor del =. Para usar la variable:





echo $variable

Ejemplo práctico:





nombre="Ana"
echo "Hola $nombre"

Salida:





Hola Ana

Variables útiles del sistema

Existen variables ya definidas por el entorno, por ejemplo:

  • $USER → usuario actual
  • $HOME → directorio personal
  • $SHELL → shell en uso
  • $PWD → directorio actual
  • $RANDOM → número aleatorio

Ejemplo:





echo "Tu usuario es $USER y estás en $PWD"

2. Parámetros Posicionales

Son valores que se pasan al script al ejecutarlo desde la terminal. Permiten que un mismo script funcione para diferentes entradas sin modificar su contenido.

Ejemplo de ejecución:





./mi_script.sh valor1 valor2 valor3

Dentro del script:

  • $1 será valor1
  • $2 será valor2
  • $3 será valor3

$# indica cuántos parámetros se han recibido.

$@ representa todos los parámetros juntos.

Ejemplo práctico (parametros.sh):





#!/bin/bash

echo "Primer parámetro: $1"
echo "Segundo parámetro: $2"
echo "Total de parámetros: $#"

Ejecutando:





./parametros.sh gato perro

Salida:





Primer parámetro: gato
Segundo parámetro: perro
Total de parámetros: 2

3. Entrada Interactiva con read

El comando read permite que el script espere que el usuario escriba algo por teclado.

Ejemplo básico:





#!/bin/bash

echo "Introduce tu nombre:"
read nombre
echo "Encantado de saludarte, $nombre"

Es posible usar read con opciones:

  • -p para mostrar un mensaje sin usar echo
  • -s para ocultar lo que se escribe (útil para contraseñas)
  • -n para captar un número concreto de caracteres

Ejemplos:





read -p "Introduce tu usuario: " usuario
read -s -p "Introduce tu contraseña: " pass
echo
echo "Usuario: $usuario"

4. Aritmética en Bash

Aunque todo es texto, Bash permite operaciones aritméticas básicas:

Sintaxis:





resultado=$(( expresion ))

Ejemplo:





a=7
b=3
c=$((a + b))
echo "Resultado: $c"

Salida esperada:





Resultado: 10

Operadores soportados:

  • + suma
  • - resta
  • * multiplicación
  • / división entera
  • % módulo

5. Combinando Variables con Texto

En Bash no hace falta concatenar como en otros lenguajes. Se puede insertar directamente la variable en cadenas.

Ejemplo:





nombre="Lucía"
echo "Bienvenida $nombre al sistema"

Si una variable está pegada a texto, conviene usar llaves { }:





version="1.0"
echo "Versión: v${version}"

6. Ejemplos Completos

Ejemplo 1: Script que saluda usando read





#!/bin/bash

read -p "Introduce tu nombre: " nombre
echo "Hola $nombre, bienvenido."

Ejemplo 2: Sumar dos números recibidos como parámetros





#!/bin/bash

a=$1
b=$2
echo "La suma es: $((a + b))"

Ejecutar:





./sumar.sh 4 8

Salida:





La suma es: 12

Ejemplo 3: Generar un archivo con información





#!/bin/bash

usuario=$USER
fecha=$(date +%Y-%m-%d)
pwd=$(pwd)

echo "Usuario: $usuario" > info.txt
echo "Fecha: $fecha" >> info.txt
echo "Directorio: $pwd" >> info.txt

Ejercicios propuestos

Ejercicio 1:
Crear un script llamado edad.sh que pida el nombre del usuario y su edad, luego muestre un mensaje tipo:





Hola Ana, tienes 23 años.

Ejercicio 2:
Crear un script suma.sh que reciba dos números como parámetros y muestre:





La suma de X + Y es Z

Ejercicio 3:
Crear un script logear.sh que pida un usuario y contraseña con read, y que oculte la contraseña al escribir.

Ejercicio 4:
Crear un script contador.sh que muestre cuántos parámetros se han pasado al script y liste cada uno en una línea.


Soluciones

✅ Ejercicio 1 – edad.sh

Enunciado:
Crear un script que pida el nombre del usuario y su edad, luego muestre algo como:

Hola Ana, tienes 23 años.

Solución:





#!/bin/bash
# Script: edad.sh
# Pide nombre y edad y muestra un mensaje

read -p "Introduce tu nombre: " nombre
read -p "Introduce tu edad: " edad

echo "Hola $nombre, tienes $edad años."

✅ Ejercicio 2 – suma.sh

Enunciado:
Crear un script suma.sh que reciba dos números como parámetros y muestre:

La suma de X + Y es Z

Solución básica (asumiendo que siempre pasan 2 números):





#!/bin/bash
# Script: suma.sh
# Suma dos números pasados como parámetros

a=$1
b=$2

resultado=$((a + b))

echo "La suma de $a + $b es $resultado"

Versión un poco más robusta (comprobando parámetros):





#!/bin/bash
# Script: suma.sh
# Suma dos números pasados como parámetros con validación básica

if [ $# -ne 2 ]; then
    echo "Uso: $0 num1 num2"
    exit 1
fi

a=$1
b=$2

resultado=$((a + b))

echo "La suma de $a + $b es $resultado"

✅ Ejercicio 3 – logear.sh

Enunciado:
Crear un script logear.sh que pida usuario y contraseña con read, ocultando la contraseña al escribir.

Solución:





#!/bin/bash
# Script: logear.sh
# Pide usuario y contraseña (sin mostrar la contraseña)

read -p "Usuario: " usuario
read -s -p "Contraseña: " password
echo
echo "Has introducido el usuario: $usuario"
echo "La contraseña se ha recibido (no se muestra por seguridad)."

Si quieres rizar el rizo en clase, puedes decir que en un caso real no se mostraría nada de la contraseña ni se imprimiría.


✅ Ejercicio 4 – contador.sh

Enunciado:
Crear un script contador.sh que:

  • Muestre cuántos parámetros se han pasado.
  • Liste cada uno en una línea.

Solución:





#!/bin/bash
# Script: contador.sh
# Muestra cuántos parámetros se han pasado y los lista

echo "Se han pasado $# parámetros."

# Si no hay parámetros, avisamos
if [ $# -eq 0 ]; then
    echo "No se ha pasado ningún parámetro."
    exit 0
fi

echo "Listado de parámetros:"
contador=1
for param in "$@"; do
    echo "Parámetro $contador: $param"
    contador=$((contador + 1))
done

Ejemplo de ejecución:





./contador.sh uno dos tres

Salida:





Se han pasado 3 parámetros.
Listado de parámetros:
Parámetro 1: uno
Parámetro 2: dos
Parámetro 3: tres