UTFSM/LabSO/Bash/calc.sh

79 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
# -------------------------------------------------------------
# Autor: Juan Pablo Parra
# Descripción: Calculadora básica en Bash que soporta suma,
# multiplicación y potencia. Solo opera con
# números naturales (enteros positivos).
# Incluye mensajes de error y ayuda (--h, --help).
# -------------------------------------------------------------
# --- Función de ayuda ---
mostrar_ayuda() {
echo "---------------------------------------------"
echo " Calculadora en Bash - Ayuda"
echo "---------------------------------------------"
echo "Uso:"
echo " ./calculadora.sh <num1> <operador> <num2>"
echo ""
echo "Operaciones disponibles:"
echo " + Suma de dos números"
echo " * Multiplicación de dos números"
echo " ** Potencia (num1 elevado a num2)"
echo ""
echo "Ejemplos:"
echo " ./calculadora.sh 2 + 2 → 4"
echo " ./calculadora.sh 3 '*' 3 → 9"
echo " ./calculadora.sh 2 '**' 3 → 8"
echo ""
echo "Notas:"
echo " - Usa comillas para los operadores * y ** para"
echo " evitar que el shell los expanda."
echo " - Solo se aceptan números naturales (enteros positivos)."
echo " - Si ocurre un error, el script retorna código 1."
echo "---------------------------------------------"
exit 0
}
# --- Verificar si se pidió ayuda antes de validar nada ---
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
mostrar_ayuda
fi
# --- Validación de argumentos ---
if [ $# -lt 3 ]; then
echo "Error: uso incorrecto. Use -h o --help para ver ayuda."
exit 1
fi
# --- Extracción de argumentos ---
num1=$1
op=$2
num2=$3
# --- Validar que los operandos sean números naturales ---
if ! [[ "$num1" =~ ^[0-9]+$ ]] || ! [[ "$num2" =~ ^[0-9]+$ ]]; then
echo "Error: los operandos deben ser números naturales (enteros positivos)."
exit 1
fi
# --- Selección de operación ---
case "$op" in
"+")
result=$((num1 + num2))
;;
"*")
result=$((num1 * num2))
;;
"**"|"^")
result=$((num1 ** num2))
;;
*)
echo "Error: operación no reconocida. Use +, * o **"
exit 1
;;
esac
# --- Mostrar resultado ---
echo "$result"
exit 0