Curso de programación con Bash
Bash es el shell y lenguaje de scripting para sistemas Unix. Aprende a escribir scripts y automatizar tareas en tu entorno Unix/Linux con Bash.
El shell Bash (Bourne Again Shell) es uno de los intérpretes de comandos más utilizados en sistemas Linux.
Proporciona una interfaz entre el usuario y el sistema operativo, permitiendo ejecutar comandos, automatizar tareas y gestionar el entorno del sistema.
Comenzando con Bash
Para acceder al shell Bash, abre una terminal en tu sistema Linux. Puedes encontrarla en el menú de aplicaciones o mediante la combinación de teclas Ctrl + Alt + T
.
Navegación básica
pwd
: muestra el directorio de trabajo actual.
$ pwd
/home/usuario
ls
: lista los archivos y directorios en el directorio actual.
$ ls
Documentos Descargas Imágenes
cd
: cambia el directorio de trabajo.
$ cd Documentos
Gestión de archivos y directorios
Creación y eliminación
mkdir
: crea un nuevo directorio.
$ mkdir proyecto
touch
: crea un nuevo archivo vacío.
$ touch archivo.txt
rm
: elimina archivos.
$ rm archivo.txt
rmdir
: elimina directorios vacíos.
$ rmdir proyecto
Copiar y mover
cp
: copia archivos o directorios.
$ cp archivo_original.txt copia.txt
mv
: mueve o renombra archivos y directorios.
$ mv archivo.txt Documentos/
Redirección y tuberías
Redirección de entrada y salida
>
: redirige la salida estándar a un archivo (sobrescribe el contenido).
$ echo "Hola mundo" > saludo.txt
>>
: añade la salida estándar al final de un archivo existente.
$ echo "Adiós mundo" >> saludo.txt
<
: utiliza un archivo como entrada estándar.
$ sort < nombres.txt
Tuberías
|
: conecta la salida de un comando con la entrada de otro.
$ ls -l | grep ".txt"
Variables y entorno
Variables de entorno
- Mostrar todas las variables de entorno:
$ printenv
- Acceder a una variable específica:
$ echo $HOME
Variables personalizadas
- Definir una variable local:
$ MI_VARIABLE="Valor"
- Exportar una variable al entorno:
$ export MI_VARIABLE
Permisos y propiedad de archivos
Ver permisos
ls -l
: muestra los permisos de archivos y directorios.
$ ls -l archivo.txt
-rw-r--r-- 1 usuario grupo 0 oct 13 12:00 archivo.txt
Cambiar permisos
chmod
: modifica los permisos.
$ chmod u+x script.sh
Cambiar propietario
chown
: cambia el propietario de un archivo o directorio.
$ sudo chown nuevo_usuario:nuevo_grupo archivo.txt
Alias y funciones
Crear alias
- Definir un alias temporal:
$ alias ll="ls -lah"
- Para hacer el alias permanente, añádelo al archivo
~/.bashrc
:
echo 'alias ll="ls -lah"' >> ~/.bashrc
Definir funciones
- Crear una función en Bash:
$ funcion_saludo() {
echo "Hola, $1"
}
- Utilizar la función:
$ funcion_saludo "Mundo"
Hola, Mundo
Scripts en Bash
Crear y ejecutar un script
- Crear un archivo de script:
$ nano mi_script.sh
- Añadir el shebang y los comandos:
#!/bin/bash
echo "Este es un script de Bash."
- Dar permisos de ejecución:
$ chmod +x mi_script.sh
- Ejecutar el script:
$ ./mi_script.sh
Estructuras de control
- Condicional if:
if [ -f "archivo.txt" ]; then
echo "El archivo existe."
else
echo "El archivo no existe."
fi
- Bucle for:
for i in {1..5}; do
echo "Número $i"
done
- Bucle while:
CONTADOR=1
while [ $CONTADOR -le 5 ]; do
echo "Iteración $CONTADOR"
CONTADOR=$((CONTADOR+1))
done
Comandos útiles
Buscar archivos y contenido
find
: busca archivos y directorios.
$ find /ruta -name "archivo.txt"
grep
: busca patrones dentro de archivos.
$ grep "texto_buscar" archivo.txt
Manipulación de texto
awk
: procesamiento de texto basado en patrones.
$ awk '/patrón/ {print $0}' archivo.txt
sed
: edición de texto en flujo.
$ sed 's/antiguo/nuevo/g' archivo.txt
Personalización del entorno
El archivo .bashrc
- Se utiliza para configurar el entorno de Bash al inicio de sesión.
- Puedes añadir alias, funciones y variables de entorno.
Modificar el prompt
- Cambiar el prompt temporalmente:
$ PS1="\u@\h:\w\$ "
- Para hacerlo permanente, edita el archivo
~/.bashrc
y añade:
export PS1="\u@\h:\w\$ "
Depuración de scripts
Modos de depuración
- Modo verbose: muestra cada comando antes de ejecutarlo.
$ bash -v mi_script.sh
- Modo de depuración: muestra los comandos y sus argumentos.
$ bash -x mi_script.sh
Gestión de procesos
Ver procesos en ejecución
ps
: muestra información sobre los procesos actuales.
$ ps aux
top
: muestra los procesos en tiempo real.
$ top
Controlar procesos
kill
: envía señales a los procesos.
$ kill -9 PID
nohup
: ejecuta un comando que continúa funcionando después de cerrar sesión.
$ nohup comando &
Trabajar con trabajos en segundo plano
Comandos útiles
&
: ejecuta un comando en segundo plano.
$ comando &
jobs
: lista los trabajos en segundo plano.
$ jobs
fg
: trae un trabajo al primer plano.
$ fg %1
bg
: envía un trabajo al segundo plano.
$ bg %1
Automatización con cron
Programar tareas
- Editar el crontab:
$ crontab -e
- Añadir una tarea programada:
0 2 * * * /ruta/mi_script.sh
Este ejemplo ejecuta mi_script.sh
todos los días a las 2:00 AM.
Seguridad en Bash
Buenas prácticas
- Evitar ejecutar scripts o comandos como root a menos que sea necesario.
- Validar entradas de usuario en scripts para prevenir inyecciones.
- Utilizar rutas absolutas en scripts para mayor claridad.
Control de versiones con Git desde Bash
Comandos básicos
- Inicializar un repositorio:
$ git init
- Añadir archivos al índice:
$ git add archivo.txt
- Realizar un commit:
$ git commit -m "Mensaje del commit"
- Ver el estado del repositorio:
$ git status
- Ver el historial de commits:
$ git log
Tutoriales de Bash
Aprende Bash con tutoriales de programación en Bash.
Principales Distribuciones De Linux
Introducción Y Entorno
Instalar Ubuntu En Windows Con Wsl
Introducción Y Entorno
Introducción A Shell Y Bash
Introducción Y Entorno
Comandos De Navegación Pwd, Cd Y Ls
Navegación Y Gestión De Archivos Y Directorios
Manipulación De Archivos Y Directorios
Navegación Y Gestión De Archivos Y Directorios
Comprimir Y Descomprimir Archivos En Bash Con Tar Y Gzip
Navegación Y Gestión De Archivos Y Directorios
Manipulación De Permisos De Archivos Y Directorios Con Chmod, Chown Y Chgrp
Navegación Y Gestión De Archivos Y Directorios
Enlaces Simbólicos Y Duros
Navegación Y Gestión De Archivos Y Directorios
Redirección Y Tuberías
Navegación Y Gestión De Archivos Y Directorios
Gestión De Procesos Con Ps, Htop Y Pgrep
Gestión De Procesos Y Servicios
Gestión De Servicios Con Systemd
Gestión De Procesos Y Servicios
Configuración De Bash
Interacción Con El Sistema
Redes Y Comunicación Con Ifconfig, Ip Y Netstat
Interacción Con El Sistema
Transferencia De Archivos Y Comunicación Remota Con Ssh
Interacción Con El Sistema
Gestión De Paquetes Y Dependencias Y Actualización Del Sistema
Interacción Con El Sistema
Variables Y Tipos De Datos
Sintaxis Y Creación De Scripts En Bash
Operadores
Sintaxis Y Creación De Scripts En Bash
Sintaxis De Control De Flujo
Sintaxis Y Creación De Scripts En Bash
Expresiones Regulares Y Manipulación De Texto
Sintaxis Y Creación De Scripts En Bash
Definición Y Uso De Funciones
Sintaxis Y Creación De Scripts En Bash
Tipo de tecnología
Lenguaje
Categoría laboral
Administración de sistemas
Año de lanzamiento
1989
Developers
Chet Ramey
Todos los módulos de Bash
Bash
Introducción y entorno
Bash
Navegación y gestión de archivos y directorios
Bash
Gestión de procesos y servicios
Bash
Interacción con el sistema
Bash
Sintaxis y creación de scripts en Bash
Bash
Evaluación
Otras tecnologías
Vuejs
Vuejs
Frontend
Framework de JS progresivo para construir interfaces de usuario reactivas y modulares.
Selenium
Selenium
Testing / QA (Quality Assurance)
Suite de herramientas open-source para automatizar navegadores web y pruebas de software de interfaz de usuario.
TypeScript
TypeScript
Full Stack
Superconjunto de JavaScript con tipado estático.
Java
Java
Backend
Lenguaje de programación versátil y multiplataforma.
Seaborn
Seaborn
Ciencia de Datos e Inteligencia artificial
Biblioteca de visualización de datos para Python.
CSharp
CSharp
Backend
Lenguaje de programación de Microsoft para aplicaciones robustas.
SpringBoot
SpringBoot
Backend
Framework para desarrollo rápido de aplicaciones Java.
Nest
Nest
Backend
Framework Node.js para crear aplicaciones escalables y eficientes.
Git
Git
DevOps
Sistema de control de versiones distribuido.
React
React
Frontend
Librería framework para frontend interfaces de usuario.
Docker
Docker
DevOps
Plataforma de contenedores para aplicaciones portátiles.
Go
Go
Backend
Lenguaje de programación eficiente y concurrente creado por Google.
SQL
SQL
Administración de bases de datos
Lenguaje para gestionar bases de datos relacionales.
TailwindCSS
TailwindCSS
Frontend
Framework de utilidades CSS para diseños rápidos y personalizables.
Kotlin
Kotlin
Backend
Lenguaje de programación moderno y seguro para aplicaciones Android.
HTML
HTML
Frontend
Lenguaje de marcado para estructurar contenido web.
Numpy
Numpy
Ciencia de Datos e Inteligencia artificial
Biblioteca Python para computación científica y matrices.
Matplotlib
Matplotlib
Ciencia de Datos e Inteligencia artificial
Biblioteca Python para crear gráficos y visualizaciones.