LinuxParty
En Shell Script, las operaciones matemáticas se realizan utilizando el intérprete de comandos expr
. Con expr
, puedes realizar operaciones aritméticas simples como sumas, restas, multiplicaciones y divisiones.
Aquí hay algunos ejemplos de cómo realizar operaciones matemáticas en Shell Script:
# Suma
result=$(expr 2 + 2)
echo "2 + 2 = $result"
# Resta
result=$(expr 5 - 3)
echo "5 - 3 = $result"
# Multiplicación
result=$(expr 4 \* 5)
echo "4 * 5 = $result"
# División
result=$(expr 10 / 2)
echo "10 / 2 = $result"
Es importante notar que en Shell Script es necesario escapar los operadores * y / para que sean tratados como operadores matemáticos en lugar de comandos.
Además de las operaciones básicas, expr
también permite realizar operaciones más complejas como cálculos de modulos y comparaciones lógicas. También es posible realizar operaciones matemáticas utilizando otras herramientas como bc
o incluso utilizando directamente el intérprete de comandos con sintaxis específica para este propósito, como por ejemplo:
result=$((2 + 2))
echo "2 + 2 = $result"
Aritméticas
En un Bash podemos realiza directamente sumas, restas, divisiones, multiplicaciones y resto de números enteros.
Para ello tendemos que poner la operación dentro de $(( )).
Operadores: +, -, /, *, % (% es el resto que resulta al realizar la división entre dos números)
- "+": Para sumar valores.
- "-": Para restar valores.
- "*": Para multiplicar valores.
- "/": Para dividir valores.
- "%": Para calcular el resto de una división.
Por ejemplo:
- echo $((25+6))
echo $((24%5))
daría como resultado 4
Para operaciones con decimales tendríamos que ayudarnos de comandos externos como bc.
Ejemplo:
- echo 6.5*4.99 | bc
La lógica de Bash
Para el terminal, los caracteres que tienen un significado lógico en la comparación o evaluación de operaciones aritméticas y de archivos son:
Evaluación de operaciones aritméticas
- "-lt": Menor que
- "-le": Menor o igual que
- "-eq": Igual que
- "-ge": Mayor o igual que
- "-gt": Mayor que
- "-ne": Distinto que
La finalidad de las operaciones lógicas es determinar si algo es verdadero o falso. Para poder hacer multitud de comprobaciones, tenemos al orden test
. Se puede ejecutar con el comando test
seguido de la comprobación que queremos hacer, o delimitar la comprobación entre corchetes.
Es decir, si quiero comprobar si $A es igual a $B puedo poner test $A = $B
, pero también puedo poner [ $A = $B ]
Operaciones que podemos hacer con test
Comparación de números
SINTAXIS | DESCRIPCIÓN |
ENTERO1 -eq ENTERO2 | ENTERO1 es igual que ENTERO2 |
ENTERO1 -ge ENTERO2 | ENTERO1 es mayor o igual que ENTERO2 |
ENTERO1 -gt ENTERO2 | ENTERO1 es mayor que ENTERO2 |
ENTERO1 -le ENTERO2 | ENTERO1 es menor que o igual que ENTERO2 |
ENTERO1 -lt ENTERO2 | ENTERO1 es menor que ENTERO2 |
ENTERO1 -ne ENTERO2 | ENTERO1 no es igual que ENTERO2 |
Comparación de texto
SINTAXIS | DESCRIPCIÓN |
CADENA1 = CADENA2 | CADENA1 es igual que CADENA2 |
CADENA1 > CADENA2 | CADENA1 es mayor que CADENA2 |
CADENA1 < CADENA2 | CADENA1 es menor que CADENA2 |
CADENA1 != CADENA2 | CADENA1 no es igual que CADENA2 |
-n CADENA | Cierto si la longitud de la cadena es distinta de cero |
Comprobaciones sobre ficheros y directorios
SINTAXIS | DESCRIPCIÓN |
-d RUTA | Cierto si la RUTA existe y es un directorio |
-e RUTA | Cierto si la RUTA existe sea el elemento que sea |
-f RUTA | Cierto si la RUTA existe y es un fichero normal |
-r RUTA | Cierto si la RUTA existe y se puede leer |
-w RUTA | Cierto si la RUTA existe y se puede escribir |
-x RUTA | Cierto si la RUTA existe y es ejecutable |
-s RUTA | Cierto si la RUTA existe y su tamaño es mayor que cero |
Otras expresiones
! EXPRESIÓN | Negación: cierto si la EXPRESIÓN es falsa |
EXPRESIÓN1 -a EXPRESIÓN2 | Cierto si EXPRESIÓN1 y EXPRESIÓN2 son ciertas. Las dos |
EXPRESIÓN1 -o EXPRESIÓN2 | Cierto si EXPRESIÓN1 o EXPRESIÓN2 son ciertas. Alguna de ellas |
Uso principal
La utilidad que tienen las operaciones lógicas es la toma de decisiones. Así podré realizar una funciones si una expresión (o pregunta) es verdadera u otras si es falsa.
Suponiendo que hacemos un script que le indicamos con el primer parámetro nuestra edad, haríamos:
- Si $1 es mayor o igual que 18
- muestro un mensaje de que eres mayor de edad
- en caso contrario
- muestro un mensaje diciendo que no lo eres
En el lenguaje de script:
- if [ $1 -ge 18 ]; then
- echo “Eres mayor de edad”
- else
- echo “Eres menos de edad”
- fi
Otro ejemplo: Script caracruz.sh
#!/bin/bash VALOR=$RANDOM RESTO=$((VALOR%2)) # SIFUERACADENA="\"$RESTO\"" echo $RESTO if [ $RESTO -eq 0 ] ; then printf "\033[1;32m - - - - - - - - - - > ¡¡ CRUZ !! --> $VALOR \n" printf " \n" printf " ___ \n" printf " / \ \n" printf "| CRUZ | \n" printf " \__ / \n" printf " \n" fi if [ $RESTO -eq 1 ] ; then printf "\033[1;33m - - - - - - - - - - > ¡¡ CARA !! --> $VALOR" printf " \n" printf " ___ \n" printf " / \ \n" printf "| CARA | \n" printf " \__ / \n" printf " \n" fi printf "\033[0;37m" echo ""
-
Scripting
- Iniciar una aplicación o un programa automáticamente desde el Cron en Linux
- Operaciones matemáticas en Shell Scripts
- 30 formas de validar archivos de configuración o scripts en Linux
- Operaciones artiméticas en Shell Scripts
- Cómo intercambiar el contenido de dos archivos en Linux
- Buscar directorios vacíos en Linux y borrarlos si procede.
- Shell Script Linux: Renombra quitando espacios
- Usar con crontab - último sábado del mes
- Shell Script de Linux para analizar un Fichero Access.log
- Analizar ficheros log de Linux con Scripts
- woof Código fuente
- Como tener seguro, protegido y encriptado tu Navegador Web Firefox (versión mejorada - versión 3)
- Arrays en Bash y Loops: iterar a través de los valores de la matriz
- Pasar una variable a AWK mediante la Shell.
- System Tar and Restore: un versátil script de copia de seguridad del sistema para Linux