Bash
Shells en Linux
Linux ofrece varios tipos de shells, entre los cuales destacan:
- Bourne Shell (
sh
) - C Shell (
csh
) - Korn Shell (
ksh
) - TC Shell (
tcsh
) - Bourne Again Shell (
bash
) - Z Shell (
zsh
)
Bash es el shell más popular y ampliamente utilizado en sistemas Linux. Combina características del Korn Shell y C Shell, cumpliendo con el estándar IEEE POSIX P1003.2/ISO 9945.2 Shell and Tools.
Sintaxis Básica de Bash
- Utiliza el alfabeto latino, dígitos arábigos, símbolos de puntuación y algunas palabras clave.
- Los scripts deben comenzar con
#!/bin/bash
para indicar que son ejecutables bajo Bash. - Las instrucciones terminan con un salto de línea o un punto y coma
;
.
Variables en Bash
- Las variables se almacenan como cadenas de texto por defecto, aunque se pueden usar en operaciones aritméticas.
- No es necesario declarar las variables antes de asignarles un valor.
- Las cadenas con espacios o caracteres especiales deben ir entre comillas:
- Comillas dobles (
""
): permiten la expansión de variables. - Comillas simples (
''
): evitan la expansión de variables. - Ejemplo:
bash nombre="Francisco" echo "Hola, $nombre!"
Variables de Entorno
-
Existen dos tipos principales:
- Variables Locales: solo disponibles en el entorno actual del script.
- Variables de Entorno: accesibles por todo el sistema y visibles mediante el comando
env
.
-
Variables comunes:
PATH
: Directorios donde se buscan los comandos.HOME
: Directorio personal del usuario.USER
,LOGNAME
: Nombre del usuario actual.PWD
: Directorio de trabajo actual.SHELL
: Ruta del shell actual.LANG
: Configuración regional del sistema.
Variables Especiales en Bash
$0
: Nombre del script.$1-$9
: Parámetros posicionales.$#
: Cantidad de parámetros pasados.$*
y$@
: Todos los parámetros.$?
: Estado de salida del último comando.$$
: ID del proceso actual.$!
: ID del último proceso en segundo plano.
Sustitución de Comandos
- Para almacenar la salida de un comando en una variable:
bash fecha=$(date) echo "La fecha actual es: $fecha"
Evaluación Aritmética
- Bash soporta operaciones aritméticas con:
let
$[expresion]
$((expresion))
- Nota: Bash no soporta operaciones de punto flotante directamente.
bash
a=5
b=3
suma=$((a + b))
echo "La suma es $suma"
Estructuras Condicionales
-
Condicionales básicas:
bash if [ $a -gt $b ]; then echo "$a es mayor que $b" elif [ $a -eq $b ]; then echo "$a es igual a $b" else echo "$a es menor que $b" fi
-
Operadores de Comparación:
- Cadenas:
=
,!=
,-n
(no vacío),-z
(vacío). - Números:
-eq
,-ne
,-gt
,-lt
,-ge
,-le
. - Archivos:
-f
(archivo regular),-d
(directorio),-r
(lectura),-w
(escritura),-x
(ejecución).
Bucles y Estructuras de Control
- For Loop:
bash for archivo in /etc/*; do echo "$archivo" done
- While Loop:
bash contador=0 while [ $contador -lt 5 ]; do echo "Contador: $contador" contador=$((contador+1)) done
- Until Loop:
bash until [ $contador -eq 0 ]; do echo "Contador: $contador" contador=$((contador-1)) done
- Case Statement:
bash read -p "Introduce una opción (y/n): " opcion case $opcion in y|Y) echo "Has elegido sí";; n|N) echo "Has elegido no";; *) echo "Opción no válida";; esac
Arreglos en Bash
miArray=(manzana naranja platano)
echo ${miArray[1]} # Imprime "naranja"
bash
for fruta in "${miArray[@]}"; do
echo "$fruta"
done
Operaciones con Cadenas
- Longitud de una cadena:
echo ${#miVariable}
- Extracción de subcadena:
echo ${miVariable:2:4}
- Reemplazo:
echo ${miVariable/manzana/pera}
Funciones en Bash
mi_funcion() {
echo "Hola desde una función!"
}
mi_funcion
Expresiones Regulares
- Para verificar si una cadena contiene números:
if [[ $var =~ [0-9]+ ]]; then echo "Contiene números" fi
Casos de Estudio
- Contar líneas en un archivo:
i=1 while read linea; do echo "$i : $linea" i=$((i+1)) done < archivo.txt
- Verificar existencia de un archivo:
if [ -f "archivo.txt" ]; then echo "El archivo existe" fi
- Mostrar información del sistema:
echo "Fecha: $(date)" echo "Tiempo de actividad: $(uptime)"