2025-12-11 00:59:43 +01:00
|
|
|
#Temario-BSA - Bash Scripting Avanzado
|
|
|
|
|
Proveniente de [[Mecánica Unix - Manejo de la shell]]
|
|
|
|
|
|
|
|
|
|
---
|
2025-12-11 01:42:15 +01:00
|
|
|
## Control de flujo
|
|
|
|
|
---
|
|
|
|
|
### Condicionales `if`, `elif`, `else` y `fi`
|
|
|
|
|
```Shell
|
|
|
|
|
if [[ "$num" -gt 10 ]]; then
|
|
|
|
|
echo "Mayor que 10"
|
|
|
|
|
elif [[ "$num" -eq 10 ]]; then
|
|
|
|
|
echo "Es 10"
|
|
|
|
|
else
|
|
|
|
|
echo "Es menor que 10"
|
|
|
|
|
fi
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### `[[ . . . ]]`
|
|
|
|
|
```Shell
|
|
|
|
|
if [[ "$x" == "hola" && -n "$x" ]]; then
|
|
|
|
|
echo "coincide"
|
|
|
|
|
fi
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
### `!` (negación)
|
|
|
|
|
``` Shell
|
|
|
|
|
if ! grep -q "hola" archivos.txt; then
|
|
|
|
|
echo "no existe hola"
|
|
|
|
|
fi
|
|
|
|
|
```
|
|
|
|
|
|
2025-12-12 15:22:45 +01:00
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## `case...in...esac`
|
|
|
|
|
```Shell
|
|
|
|
|
case $option in
|
|
|
|
|
start) echo "iniciando";;
|
|
|
|
|
stop) echo "Finalizando";;
|
|
|
|
|
*) echo "Opción no válida";;
|
|
|
|
|
esac
|
|
|
|
|
```
|
2025-12-11 01:42:15 +01:00
|
|
|
|
2025-12-12 15:22:45 +01:00
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## `for, in, do, done` (Bucles)
|
|
|
|
|
```Shell
|
|
|
|
|
for i in 1 2 3; do
|
|
|
|
|
echo "numero $i"
|
|
|
|
|
done
|
|
|
|
|
```
|
2025-12-11 01:42:15 +01:00
|
|
|
|
2025-12-12 15:22:45 +01:00
|
|
|
---
|
2025-12-11 01:42:15 +01:00
|
|
|
|
2025-12-12 15:22:45 +01:00
|
|
|
## `while, until` (Bucles condicionales)
|
|
|
|
|
```Shell
|
|
|
|
|
while [[ "$x" -lt 5 ]]; do
|
|
|
|
|
echo $x
|
|
|
|
|
((x++))
|
|
|
|
|
done
|
|
|
|
|
```
|
2025-12-11 01:42:15 +01:00
|
|
|
|
2025-12-12 15:22:45 +01:00
|
|
|
```Shell
|
|
|
|
|
until [[ "$x" -eq 5 ]]; do
|
|
|
|
|
echo $x
|
|
|
|
|
((x++))
|
|
|
|
|
done
|
|
|
|
|
```
|
2025-12-11 01:42:15 +01:00
|
|
|
|
2025-12-12 15:22:45 +01:00
|
|
|
---
|
2025-12-11 01:42:15 +01:00
|
|
|
|
2025-12-12 15:22:45 +01:00
|
|
|
## `select` (Menú interactivo)
|
|
|
|
|
```Shell
|
|
|
|
|
select opcion in Start Stop Exit; do
|
|
|
|
|
echo "Elegiste la opcion $opcion"
|
|
|
|
|
done
|
2025-12-12 17:45:02 +01:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
## Contador de longitud
|
|
|
|
|
```Shell
|
|
|
|
|
validador() {
|
|
|
|
|
local passwd=$1
|
|
|
|
|
local long=${#passwd} # Para leer longitud de un dato, se usa ${#variable}
|
|
|
|
|
if [[ "$long" -gt 8 ]]; then
|
|
|
|
|
echo "PWD_GT_8"
|
|
|
|
|
else
|
|
|
|
|
echo "PWD_LT_8"
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
### Verificación de mayúsculas, minúsculas, números y caracteres especiales
|
|
|
|
|
|
|
|
|
|
Se utiliza el comparador de valores regex (`=~`) en conjunto con los valores regex:
|
|
|
|
|
|
|
|
|
|
#### ¿Minúscula?
|
|
|
|
|
```Shell
|
|
|
|
|
[[ "Hola123" =~ [a-z] ]] # true
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
##### ¿Mayúscula?
|
|
|
|
|
```Shell
|
|
|
|
|
[[ "Hola123" =~ [A-Z] ]] # true
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
##### ¿Números?
|
|
|
|
|
```Shell
|
|
|
|
|
[[ "abc123def" =~ [0-9] ]] # true
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
###### ¿Caracteres especiales?
|
|
|
|
|
```Shell
|
|
|
|
|
[[ "asd1!213das" =~ [^a-zA-Z0-9] ]] # true
|
|
|
|
|
```
|