Programación Shell: Ejemplos Prácticos de Bash y Utilidades Linux Esenciales
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 8,18 KB
Introducción a la Programación Shell y Utilidades de Línea de Comandos
Este documento presenta una colección de scripts Bash y ejemplos de comandos fundamentales de Linux, ideales para comprender la automatización y el manejo de datos en entornos de terminal. Exploraremos desde la lógica de control de flujo en Bash hasta el uso avanzado de herramientas como awk
y grep
.
Simulador de Estaciones de Tren en Bash
Este script simula un sistema de navegación por estaciones de tren. Permite al usuario avanzar (S/s), retroceder (A/a) o reiniciar (R/r) la posición, y muestra la estación actual. Al presionar 'E' o 'e', se emite un mensaje de desalojo.
#!/bin/bash
pos=0
while true; do
read tecla
if [[ $tecla == S ]] || [[ $tecla == s ]]; then
if [[ $pos -le 4 ]]; then
pos=$(($pos + 1))
fi
fi
if [[ $tecla == A ]] || [[ $tecla == a ]]; then
if [[ $pos -gt 0 ]]; then
pos=$(($pos - 1))
fi
fi
if [[ $tecla == r ]] || [[ $tecla == R ]]; then
pos=0
fi
if [[ $tecla == e ]] || [[ $tecla == E ]]; then
echo "Desalojen el tren de forma tranquila"
else
if [[ $pos == 0 ]]; then
echo "Terminal"
elif [[ $pos == 1 ]]; then
echo "Estación Sants"
elif [[ $pos == 2 ]]; then
echo "Estación Gracia"
elif [[ $pos == 3 ]]; then
echo "Estación Clot"
else
echo "Estación Andreu"
fi
fi
done
Operaciones Básicas y Comandos Esenciales en Bash
Esta sección detalla ejemplos prácticos de operaciones aritméticas, bucles y redirecciones de entrada/salida, junto con el uso de comandos clave como shuf
, awk
y grep
para el procesamiento de texto.
Operaciones Aritméticas y Bucles
- Suma de variables:
$(($var+$val))
- Bucle
for
: Itera sobre un rango de números.for i in {1..10}; do echo $i done
La variable i toma el valor de los números del 1 al 10.
Redirección de Entrada/Salida
- Sobrescribir archivo:
echo "texto" > archivo.txt
. - Añadir al final:
echo "texto" >> archivo.txt
. >>
: Añade al final del archivo.>
: Sobreescribe el archivo.<
: Para leer línea a línea (redirección de entrada).
Generación de Números Aleatorios
El comando shuf
permite generar números aleatorios o mezclar líneas de un archivo.
shuf -i 1-100 -n 1
Este comando genera un número aleatorio entre 1 y 100.
Uso de AWK para Procesamiento de Texto
awk
es una potente herramienta para el procesamiento de texto y la manipulación de datos estructurados.
- Sintaxis básica:
awk 'patrón {acciones}' archivo
- Filtrar líneas por contenido:
awk '/error/ {print $0}' archivo.txt
Muestra las líneas que contienen 'error'.
- Filtrar líneas a partir de una posición:
awk 'NR > 2 {print $0}' archivo.txt
Muestra las líneas a partir de la tercera línea en adelante (
NR
es el número de registro/línea). - Filtrado condicional avanzado:
awk '$2 ~ /error/ && $3 > 100 {print $1, $3}' archivo.txt
Imprime la primera ($1) y tercera ($3) columnas si la segunda columna ($2) contiene "error" y la tercera columna ($3) es mayor que 100.
Uso de GREP para Búsqueda de Patrones
grep
es una herramienta fundamental para buscar patrones de texto dentro de archivos.
- Buscar líneas que contienen un patrón:
grep "error" archivo.txt
Muestra las líneas que contienen 'error'.
- Buscar palabras completas:
grep -w "clave" archivo.txt
Busca "clave" como palabra completa (ej. encuentra "clave" pero no "clave123").
- Excluir líneas con un patrón:
grep -v "error" archivo.txt
Muestra las líneas que no contienen "error".
- Buscar líneas que empiezan con un patrón:
grep "^inicio" archivo.txt
Muestra las líneas que empiezan con "inicio".
- Combinar
grep
yawk
:grep "error" archivo.txt | awk '{print $2}'
Busca líneas con "error" y muestra solo la segunda columna de esas líneas.
Script de Selección de Programas
Este script demuestra cómo usar condicionales y bucles para procesar un archivo (programas
) basándose en la entrada del usuario. Permite filtrar líneas específicas de un archivo.
if [[ $opcion -eq 1 ]]; then
grep "a" programas
fi
if [[ $opcion -eq 2 ]]; then
echo "¿Qué programa quieres? suave, lana, rápido, color"
read prog
var=0
if [[ $prog == suave ]]; then
while read -r line; do
((var++))
if [[ $var -gt 2 && $var -lt 7 ]]; then # Imprime líneas de la 3 a la 6 (índice 2 a 6)
echo $line
fi
done < programas
fi
fi
Juego de Adivinanza en Bash
Un sencillo juego donde el usuario debe adivinar un número aleatorio generado por el script. El script proporciona pistas indicando si el número a adivinar es mayor o menor.
aleatorio=$(shuf -i 0-100 -n 1)
echo "Dame un número"
read numero
while [[ $numero -ne $aleatorio ]]; do
if [[ $numero -gt $aleatorio ]]; then
echo "El número es más pequeño"
read numero
elif [[ $numero -lt $aleatorio ]]; then
echo "El número es más grande"
read numero
elif [[ $numero -eq $aleatorio ]]; then
echo "¡Has acertado!"
fi
done
if [[ $numero -eq $aleatorio ]]; then
echo "¡Has acertado!"
fi
Sistema Básico de Gestión de Clientes de Gimnasio
Este script simula un sistema rudimentario para gestionar clientes de un gimnasio, permitiendo la matrícula de nuevos usuarios, un control de acceso básico y la visualización de un panel de control.
#!/bin/bash
echo "a. Matrícula nueva"
echo "b. Control de acceso"
echo "c. Panel de control"
archivo=clientes.txt
read opcion
nombre=0
edad=0
dni=0
idgym=0
pagook=0
fecha=0
if [[ $opcion == a ]]; then
echo "Rellena los siguientes campos:"
echo "Dame tu DNI"
read dni
if grep -q "$dni" "$archivo"; then
echo "Ya estás dado de alta."
return
fi
echo "Dame tu edad"
read edad
echo "Dame tu nombre"
read nombre
idgym=$((RANDOM % 999))
pagook=1
fecha=00000000
echo "$nombre-$edad-$dni-$idgym-$pagook-$fecha" >> $archivo
echo "¡Bien! Tu ID de gimnasio es $idgym"
fi
if [[ $opcion == b ]]; then
echo "Dame tu ID"
read idgym
verificar=$(awk -F '-' '{print $4}' "clientes.txt")
if [ -z "$verificar" ]; then
echo "Cadena vacía (archivo de clientes vacío o IDs no encontrados)."
else
echo "Estás verificado (ID encontrado en el archivo)."
fi
fi
if [[ $opcion == c ]]; then
while [[ $var -eq 0 ]]; do
awk -F '-' '{print $1 " " $5}' "$archivo"
sleep 4
awk '$2 == 0 {print $1 $3}' "$archivo"
sleep 4
done
fi
Nota sobre el script de gestión de clientes: La lógica de verificación de acceso (opción 'b') y el filtrado en el panel de control (opción 'c') son simplificados y podrían requerir mejoras para un sistema real. Por ejemplo, la opción 'b' verifica si el archivo de clientes tiene IDs, no si el ID introducido por el usuario existe. La opción 'c' filtra por edad 0, lo cual podría ser un marcador de estado o un error tipográfico en el original.