GNU Bash

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.

Introducción al shell Bash de Linux

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

  1. Crear un archivo de script:
  $ nano mi_script.sh
  1. Añadir el shebang y los comandos:
  #!/bin/bash
  echo "Este es un script de Bash."
  1. Dar permisos de ejecución:
  $ chmod +x mi_script.sh
  1. 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
Certifícate en Bash con CertiDevs PLUS

Tutoriales de Bash

Aprende Bash con tutoriales de programación en Bash.

Principales Distribuciones De Linux

GNU Bash

Introducción Y Entorno

Instalar Ubuntu En Windows Con Wsl

GNU Bash

Introducción Y Entorno

Introducción A Shell Y Bash

GNU Bash

Introducción Y Entorno

Comandos De Navegación Pwd, Cd Y Ls

GNU Bash

Navegación Y Gestión De Archivos Y Directorios

Manipulación De Archivos Y Directorios

GNU Bash

Navegación Y Gestión De Archivos Y Directorios

Comprimir Y Descomprimir Archivos En Bash Con Tar Y Gzip

GNU Bash

Navegación Y Gestión De Archivos Y Directorios

Manipulación De Permisos De Archivos Y Directorios Con Chmod, Chown Y Chgrp

GNU Bash

Navegación Y Gestión De Archivos Y Directorios

Enlaces Simbólicos Y Duros

GNU Bash

Navegación Y Gestión De Archivos Y Directorios

Redirección Y Tuberías

GNU Bash

Navegación Y Gestión De Archivos Y Directorios

Gestión De Procesos Con Ps, Htop Y Pgrep

GNU Bash

Gestión De Procesos Y Servicios

Gestión De Servicios Con Systemd

GNU Bash

Gestión De Procesos Y Servicios

Configuración De Bash

GNU Bash

Interacción Con El Sistema

Redes Y Comunicación Con Ifconfig, Ip Y Netstat

GNU Bash

Interacción Con El Sistema

Transferencia De Archivos Y Comunicación Remota Con Ssh

GNU Bash

Interacción Con El Sistema

Gestión De Paquetes Y Dependencias Y Actualización Del Sistema

GNU Bash

Interacción Con El Sistema

Variables Y Tipos De Datos

GNU Bash

Sintaxis Y Creación De Scripts En Bash

Operadores

GNU Bash

Sintaxis Y Creación De Scripts En Bash

Sintaxis De Control De Flujo

GNU Bash

Sintaxis Y Creación De Scripts En Bash

Expresiones Regulares Y Manipulación De Texto

GNU Bash

Sintaxis Y Creación De Scripts En Bash

Ejercicios de programación de Bash

Evalúa tus conocimientos en Bash con ejercicios de programación Bash de tipo Test, Puzzle, Código y Proyecto con VSCode.

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

Otras tecnologías

Vuejs

Vuejs

Frontend

Framework de JS progresivo para construir interfaces de usuario reactivas y modulares.

Java

Java

Backend

Lenguaje de programación versátil y multiplataforma.

TypeScript
TypeScript

TypeScript

Full Stack

Superconjunto de JavaScript con tipado estático.

Spring Boot
SpringBoot

SpringBoot

Backend

Framework para desarrollo rápido de aplicaciones Java.

CSharp

CSharp

Backend

Lenguaje de programación de Microsoft para aplicaciones robustas.

Git
Git

Git

DevOps

Sistema de control de versiones distribuido.

React
React

React

Frontend

Librería framework para frontend interfaces de usuario.

NestJS
Nest

Nest

Backend

Framework Node.js para crear aplicaciones escalables y eficientes.

SQL

SQL

Administración de bases de datos

Lenguaje para gestionar bases de datos relacionales.

Tailwind CSS
TailwindCSS

TailwindCSS

Frontend

Framework de utilidades CSS para diseños rápidos y personalizables.

HTML5
HTML

HTML

Frontend

Lenguaje de marcado para estructurar contenido web.

NumPy
Numpy

Numpy

Ciencia de Datos e Inteligencia artificial

Biblioteca Python para computación científica y matrices.

Bootstrap
Bootstrap

Bootstrap

Frontend

Framework CSS para diseños web responsive y modernos.

Hibernate
Hibernate

Hibernate

Backend

ORM para Java, simplifica el acceso a bases de datos.

JavaScript
JavaScript

JavaScript

Full Stack

Lenguaje de scripting para desarrollo web interactivo.

pandas
Pandas

Pandas

Ciencia de Datos e Inteligencia artificial

Herramienta Python para análisis y manipulación de datos.

Docker
Docker

Docker

DevOps

Plataforma de contenedores para aplicaciones portátiles.

Angular
Angular

Angular

Frontend

Framework web de Google para aplicaciones dinámicas.