GNU Bash

Bash

Tutorial Bash: Operadores

Aprende sobre operadores en Bash para cálculos, comparaciones, y manipulación de cadenas en scripts. Mejora la eficiencia y flexibilidad de tus scripts Bash.

Operadores aritméticos

En Bash, los operadores aritméticos permiten realizar cálculos matemáticos dentro de scripts, lo que es esencial para manipular datos numéricos. A diferencia de otros lenguajes de programación, Bash no soporta operaciones aritméticas directamente sobre variables sin algún tipo de evaluación. Se utiliza el comando expr o la expansión aritmética $(( )) para realizar estas operaciones. La expansión aritmética es la forma más moderna y eficiente de realizar cálculos en Bash scripts.

Los operadores aritméticos básicos en Bash incluyen:

  • Suma (+): Realiza la adición de dos operandos.
  • Resta (-): Realiza la sustracción del segundo operando del primero.
  • Multiplicación (*): Multiplica dos operandos.
  • División (/): Realiza la división del primer operando por el segundo. Es importante notar que la división en Bash devuelve solo la parte entera del cociente.
  • Módulo (%): Devuelve el resto de la división del primer operando por el segundo.
  • Incremento (++): Incrementa el valor del operando en uno.
  • Decremento (--): Decrementa el valor del operando en uno.

Ejemplo de uso de operadores aritméticos en un Bash script:

#!/bin/bash

# Definición de variables
a=15
b=4

# Uso de la expansión aritmética para calcular resultados
suma=$((a + b))
resta=$((a - b))
multiplicacion=$((a * b))
division=$((a / b))
modulo=$((a % b))

# Incremento y decremento
((a++))
((b--))

echo "Suma: $suma"
echo "Resta: $resta"
echo "Multiplicación: $multiplicacion"
echo "División: $division"
echo "Módulo: $modulo"
echo "Incremento de a: $a"
echo "Decremento de b: $b"

En este ejemplo, se observa cómo se utilizan los operadores aritméticos para realizar cálculos básicos. La expansión aritmética $(( )) permite evaluar expresiones aritméticas y almacenar los resultados en variables. Cabe destacar que ++ y -- son operadores unarios que modifican el valor de las variables a y b en el ejemplo.

Es crucial comprender que la división en Bash es entera, lo que significa que cualquier parte decimal se descarta. Para operaciones más complejas que involucren números decimales, se recomienda utilizar herramientas externas como bc o awk.

La manipulación de números es fundamental para la creación de scripts eficientes que interactúan con sistemas Linux mediante comandos Linux y Shell, aprovechando al máximo las capacidades de Bash para el procesamiento de datos.

Operadores de comparación

En Bash, los operadores de comparación se utilizan para evaluar relaciones entre valores, lo que resulta fundamental para la toma de decisiones dentro de un Bash script. Estos operadores permiten comparar números y cadenas de texto, y son esenciales para la ejecución de condiciones en estructuras de control como if, while y until.

Los operadores de comparación numérica en Bash son:

  • Igual a (-eq): Comprueba si dos números son iguales.
  • No igual a (-ne): Comprueba si dos números son diferentes.
  • Menor que (-lt): Comprueba si un número es menor que otro.
  • Menor o igual que (-le): Comprueba si un número es menor o igual que otro.
  • Mayor que (-gt): Comprueba si un número es mayor que otro.
  • Mayor o igual que (-ge): Comprueba si un número es mayor o igual que otro.

Ejemplo de uso de operadores de comparación numérica en un Bash script:

#!/bin/bash

a=10
b=20

if [ $a -eq $b ]; then
    echo "a es igual a b"
fi

if [ $a -ne $b ]; then
    echo "a no es igual a b"
fi

if [ $a -lt $b ]; then
    echo "a es menor que b"
fi

if [ $a -le $b ]; then
    echo "a es menor o igual que b"
fi

if [ $a -gt $b ]; then
    echo "a es mayor que b"
fi

if [ $a -ge $b ]; then
    echo "a es mayor o igual que b"
fi

Para comparar cadenas de texto, Bash utiliza un conjunto diferente de operadores:

  • Igual a (=): Comprueba si dos cadenas son iguales.
  • No igual a (!=): Comprueba si dos cadenas son diferentes.
  • Cadena vacía (-z): Comprueba si la longitud de una cadena es cero.
  • Cadena no vacía (-n): Comprueba si la longitud de una cadena no es cero.

Ejemplo de uso de operadores de comparación de cadenas:

#!/bin/bash

str1="hola"
str2="mundo"

if [ "$str1" = "$str2" ]; then
    echo "Las cadenas son iguales"
fi

if [ "$str1" != "$str2" ]; then
    echo "Las cadenas son diferentes"
fi

if [ -z "$str1" ]; then
    echo "La cadena str1 está vacía"
fi

if [ -n "$str2" ]; then
    echo "La cadena str2 no está vacía"
fi

Es importante utilizar comillas alrededor de las variables al comparar cadenas para evitar errores relacionados con espacios o caracteres especiales. En el caso de los operadores numéricos, las comillas no son necesarias. Estos operadores de comparación, junto con los comandos Linux y la sintaxis del Shell, permiten crear Bash scripts robustos y flexibles, capaces de realizar evaluaciones lógicas avanzadas en diversos contextos.

Operadores lógicos

En Bash, los operadores lógicos se utilizan para combinar múltiples condiciones en estructuras de control como if, while y until, permitiendo realizar evaluaciones complejas dentro de un Bash script. Estos operadores son fundamentales para la lógica de control en scripts que interactúan con comandos Linux y la Shell.

Los operadores lógicos principales en Bash son:

  • AND lógico (&&): Evalúa a true si ambas condiciones son verdaderas. Se utiliza para ejecutar el segundo comando solo si el primero tiene éxito.
  • OR lógico (||): Evalúa a true si al menos una de las condiciones es verdadera. Se utiliza para ejecutar el segundo comando solo si el primero falla.
  • NOT lógico (!): Invierte el valor lógico de una condición. Si la condición es verdadera, se evalúa como falsa, y viceversa.

Cuando se utilizan dentro de condiciones, es recomendable usar [[ ]] en lugar de [ ], ya que [[ ]] admite operadores lógicos y es más flexible para expresiones complejas.

Ejemplo de uso de operadores lógicos en un Bash script:

#!/bin/bash

a=10
b=20

# AND lógico
if [[ $a -lt $b && $b -gt 15 ]]; then
    echo "a es menor que b y b es mayor que 15"
fi

# OR lógico
if [[ $a -gt $b || $b -eq 20 ]]; then
    echo "a es mayor que b o b es igual a 20"
fi

# NOT lógico
if [[ ! $a -eq $b ]]; then
    echo "a no es igual a b"
fi

En el ejemplo anterior, se demuestra cómo utilizar operadores lógicos para evaluar condiciones múltiples de manera eficiente. El operador && garantiza que ambas condiciones sean verdaderas para ejecutar el bloque de código, mientras que || permite que cualquiera de las condiciones sea verdadera. El operador ! se utiliza para invertir la evaluación de una condición, proporcionando flexibilidad adicional en la lógica del script.

Además, para agrupar condiciones y controlar la precedencia de las operaciones lógicas, se pueden utilizar paréntesis dentro de [[ ]]:

#!/bin/bash

x=5
y=15
z=10

if [[ $x -lt $y && ( $y -gt $z || $z -eq 10 ) ]]; then
    echo "x es menor que y, y además, y es mayor que z o z es igual a 10"
fi

En este caso, el uso de [[ ]] y paréntesis permite que la expresión lógica se evalúe correctamente, asegurando que la lógica del script Bash sea clara y precisa. Esto optimiza su funcionamiento en entornos Linux mediante la ejecución de comandos Linux y el uso efectivo de la Shell.

Además de los operadores mencionados, es posible utilizar paréntesis para agrupar condiciones y controlar la precedencia de las operaciones lógicas. Esto es particularmente útil cuando se combinan varios operadores lógicos en una única expresión, asegurando que las evaluaciones se realicen en el orden deseado.

#!/bin/bash

x=5
y=15
z=10

if [ $x -lt $y ] && ([ $y -gt $z ] || [ $z -eq 10 ]); then
    echo "x es menor que y, y además, y es mayor que z o z es igual a 10"
fi

En este caso, el uso de paréntesis permite que la expresión lógica se evalúe correctamente, primero verificando la condición dentro de los paréntesis antes de combinarla con la condición externa usando &&. Esto asegura que la lógica del script Bash sea clara y precisa, optimizando su funcionamiento en entornos Linux mediante la ejecución de comandos Linux y el uso efectivo de la Shell.

Operadores de manipulación de cadenas

En Bash, los operadores de manipulación de cadenas son esenciales para trabajar eficientemente con texto dentro de un Bash script. Estos operadores permiten realizar tareas comunes como concatenación, extracción, sustitución y búsqueda de patrones en cadenas de texto, lo cual es fundamental para el procesamiento de datos en entornos Linux y Shell.

Para concatenar cadenas en Bash, simplemente se pueden colocar una junto a la otra, utilizando variables o texto literal:

#!/bin/bash

str1="Hola"
str2="Mundo"
resultado="$str1 $str2"
echo "$resultado"  # Salida: Hola Mundo

La extracción de subcadenas se realiza utilizando la sintaxis de subcadena ${variable:posición:longitud}. Esta permite extraer una parte específica de una cadena:

#!/bin/bash

cadena="abcdef"
subcadena=${cadena:2:3}
echo "$subcadena"  # Salida: cde

Para obtener la longitud de una cadena, se utiliza la sintaxis ${#variable}:

#!/bin/bash

cadena="Hola Mundo"
longitud=${#cadena}
echo "$longitud"  # Salida: 10

La sustitución de patrones dentro de cadenas se realiza con la sintaxis ${variable/patrón/nuevo_valor}. Esto permite reemplazar la primera aparición de un patrón en una cadena:

#!/bin/bash

cadena="Hola Mundo"
nueva_cadena=${cadena/Mundo/Universo}
echo "$nueva_cadena"  # Salida: Hola Universo

Para reemplazar todas las apariciones de un patrón, se utiliza ${variable//patrón/nuevo_valor}:

#!/bin/bash

cadena="abc abc abc"
nueva_cadena=${cadena//abc/XYZ}
echo "$nueva_cadena"  # Salida: XYZ XYZ XYZ

Bash también permite la eliminación de prefijos y sufijos de cadenas utilizando ${variable#patrón} y ${variable%patrón} para eliminar la coincidencia más corta, o ${variable##patrón} y ${variable%%patrón} para la coincidencia más larga:

#!/bin/bash

archivo="ruta/a/mi_archivo.txt"
nombre_sin_ruta=${archivo##*/}
echo "$nombre_sin_ruta"  # Salida: mi_archivo.txt

nombre_sin_extension=${archivo%.txt}
echo "$nombre_sin_extension"  # Salida: ruta/a/mi_archivo

Para buscar patrones complejos, se pueden utilizar expresiones regulares con el comando [[ ]] y el operador =~:

#!/bin/bash

cadena="123abc"
if [[ $cadena =~ [0-9]{3}[a-z]{3} ]]; then
    echo "La cadena contiene un patrón numérico seguido de letras"
fi

Estos operadores de manipulación de cadenas son útiles herramientas en Bash scripts para gestionar y transformar texto. El uso adecuado de estas técnicas es crucial para la creación de scripts que interactúan con comandos Linux y Shell, optimizando el procesamiento de datos en entornos de sistemas operativos basados en Unix.

Operadores de archivos

En Bash, los operadores de archivos permiten realizar comprobaciones sobre las propiedades y el estado de los archivos y directorios dentro de un Bash script. Estos operadores son fundamentales para gestionar archivos en sistemas Linux y escribir scripts que interactúen con el Shell de manera efectiva. Los operadores de archivos se utilizan principalmente dentro de estructuras de control como if, while y until.

Los operadores de archivos más comunes en Bash son:

  • -e: Comprueba si un archivo o directorio existe.
  • -f: Comprueba si existe un archivo regular.
  • -d: Comprueba si existe un directorio.
  • -r: Comprueba si un archivo es legible.
  • -w: Comprueba si un archivo es escribible.
  • -x: Comprueba si un archivo es ejecutable.
  • -s: Comprueba si un archivo tiene un tamaño mayor que cero.
  • -L: Comprueba si un archivo es un enlace simbólico.
  • -h: También comprueba si un archivo es un enlace simbólico, equivalente a -L.

Ejemplo de uso de operadores de archivos en un Bash script:

#!/bin/bash

archivo="/ruta/a/archivo.txt"

if [ -e "$archivo" ]; then
    echo "El archivo existe."
fi

if [ -f "$archivo" ]; then
    echo "Es un archivo regular."
fi

if [ -d "$archivo" ]; then
    echo "Es un directorio."
fi

if [ -r "$archivo" ]; then
    echo "El archivo es legible."
fi

if [ -w "$archivo" ]; then
    echo "El archivo es escribible."
fi

if [ -x "$archivo" ]; then
    echo "El archivo es ejecutable."
fi

if [ -s "$archivo" ]; then
    echo "El archivo no está vacío."
fi

if [ -L "$archivo" ]; then
    echo "El archivo es un enlace simbólico."
fi

Este ejemplo demuestra cómo utilizar operadores de archivos para verificar diferentes propiedades de un archivo o directorio. Los operadores se utilizan dentro de condiciones if, lo que permite tomar decisiones basadas en el estado de los archivos.

Es importante recordar que al trabajar con rutas de archivos, es recomendable utilizar comillas dobles alrededor de las variables que contienen las rutas para evitar problemas con espacios o caracteres especiales.

Además de los operadores mencionados, es posible utilizar operadores de comparación para comparar archivos entre sí:

  • -nt: Determina si un archivo es más reciente que otro.
  • -ot: Determina si un archivo es más antiguo que otro.
  • -ef: Comprueba si dos archivos son idénticos (mismo inode).

Ejemplo de comparación de archivos:

#!/bin/bash

archivo1="/ruta/a/archivo1.txt"
archivo2="/ruta/a/archivo2.txt"

if [ "$archivo1" -nt "$archivo2" ]; then
    echo "archivo1 es más reciente que archivo2."
fi

if [ "$archivo1" -ot "$archivo2" ]; then
    echo "archivo1 es más antiguo que archivo2."
fi

if [ "$archivo1" -ef "$archivo2" ]; then
    echo "archivo1 y archivo2 son idénticos."
fi

Estos operadores son esenciales para la creación de scripts que interactúan con el sistema de archivos, permitiendo gestionar archivos y directorios de manera eficiente en entornos de comandos Linux y Shell. La comprensión y el uso adecuado de los operadores de archivos en Bash script son fundamentales para desarrollar scripts robustos y adaptables a diferentes escenarios de administración de sistemas.

Precedencia de operadores

En un Bash script, la precedencia de operadores determina el orden en el que se evalúan las expresiones dentro del Shell. Comprender la precedencia es crucial para evitar errores lógicos en la evaluación de expresiones complejas que involucran múltiples operadores, especialmente en el contexto de comandos Linux y scripts que se ejecutan en Shell.

La precedencia de operadores en Bash, especialmente dentro de [[ ]], sigue un orden similar al de otros lenguajes de programación, donde los operadores aritméticos, lógicos y de comparación se evalúan de acuerdo con su jerarquía. A continuación se presenta un resumen de la precedencia de operadores en Bash, desde la más alta hasta la más baja:

  • Paréntesis (): Se utilizan para agrupar expresiones y forzar la evaluación de las operaciones contenidas en su interior antes que otras operaciones fuera de los paréntesis. Esto permite controlar explícitamente el orden de evaluación.
resultado=$((3 + 2 * 2))  # Sin paréntesis, se evalúa como 3 + (2 * 2), resultado: 7
resultado=$(((3 + 2) * 2))  # Con paréntesis, se evalúa como (3 + 2) * 2, resultado: 10
  • Negación lógica !: Tiene una alta precedencia y se evalúa antes que otros operadores lógicos. Se utiliza para invertir el valor de una expresión.
if ! [ -e "/ruta/no_existe" ]; then
    echo "El archivo no existe"
fi
  • Multiplicación *, división /, y módulo %: Estos operadores aritméticos tienen una precedencia mayor que la suma y la resta.
resultado=$((5 * 2 + 3))  # Se evalúa como (5 * 2) + 3, resultado: 13
  • Suma + y resta -: Se evalúan después de la multiplicación, división y módulo.
resultado=$((5 + 2 - 3))  # Se evalúa de izquierda a derecha, resultado: 4
  • Operadores de comparación: Como -eq, -ne, -lt, -le, -gt, -ge se evalúan después de los operadores aritméticos.
if [ $a -lt 5 ] && [ $b -gt 10 ]; then
    echo "a es menor que 5 y b es mayor que 10"
fi
  • AND lógico &&: Se evalúa antes que el OR lógico, pero después de los operadores de comparación. Esto significa que todas las condiciones unidas por && deben ser verdaderas para que el conjunto se evalúe como verdadero.
if [ $a -lt 5 ] && [ $b -gt 10 ]; then
    echo "Condición compuesta con AND"
fi
  • OR lógico ||: Tiene la precedencia más baja en comparación con los operadores anteriores. Se evalúa después de que se hayan evaluado todas las condiciones AND.
if [ $a -gt 5 ] || [ $b -lt 10 ]; then
    echo "Condición compuesta con OR"
fi

Para manejar correctamente la precedencia en expresiones complejas, es recomendable utilizar paréntesis para agrupar operaciones y aclarar el orden de evaluación deseado. Esto no solo mejora la legibilidad del Bash script, sino que también reduce la posibilidad de errores al ejecutar comandos Linux y scripts en Shell. La comprensión detallada de la precedencia de operadores es fundamental para desarrollar scripts que funcionen de manera precisa y eficiente en entornos de sistemas operativos basados en Unix.

Certifícate en Bash con CertiDevs PLUS

Ejercicios de esta lección Operadores

Evalúa tus conocimientos de esta lección Operadores con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Todas las lecciones de Bash

Accede a todas las lecciones de Bash y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

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

Definición Y Uso De Funciones

GNU Bash

Sintaxis Y Creación De Scripts En Bash

En esta lección

Objetivos de aprendizaje de esta lección

  • Entender el uso de operadores aritméticos en Bash para realizar cálculos.
  • Aprender a utilizar operadores de comparación y lógicos para control de flujo.
  • Conocer operadores de manipulación de cadenas y su aplicación en scripts.
  • Examinar operadores de archivos para gestionar y verificar propiedades de archivos.
  • Comprender la precedencia de operadores para evitar errores lógicos.