ยฟNo pudiste venir a la charla de Rooted?
ยกNo te preocupes! Ahora puedes apuntarte para verla y hacer todas tus preguntas en el webinar que serรก el 24 de marzo a las 18:00 (hora Madrid) 2026.
No pierdas esta oportunidad de aprender y conectar con expertos en ciberseguridad. #bugbounty #calude #cybersecurity #hacking
Regรญstrate aquรญ: https://t.co/tNchUfXBUZ
Un objeto permanece en reposo a menos que algo lo empuje a moverse. Lo mismo ocurre con nuestras acciones; nos quedamos anglados en la comodidad de lo conocido, esperando que algo o alguien nos impulse hacia el cambio. #despierta
Cuidado con el peรณnโฆ que si avanza con inteligencia, se puede convertir en reina y dar jaque mate al rey. โ ๏ธโ๏ธ๐ #Estrategia#Reflexiรณn#frasedeldia
ยกReflexiรณn para el 2025!Si tus hรกbitos no cambian, no tendrรกs un aรฑo nuevo; tendrรกs un aรฑo mรกs.ยฟListo para transformarte? ๐ค๐ท #CambioDeHรกbitos#AรฑoNuevoVidaNueva
ยฟQuรฉ herramientas y recursos utilizas para automatizar tus ataques de SQL injection? Desde SQLmap hasta Burp Suite, ยกcomparte tu arsenal! #SQLinjection#HackingTools#Automation
๐๐ฎ๐ขฬ๐ ๐๐ฬ๐ฉ๐ข๐๐ ๐๐ ๐๐๐ฌ๐ก ๐๐๐ซ๐ข๐ฉ๐ญ๐ข๐ง๐
Bash (acrรณnimo de Bourne Again SHell) es un intรฉrprete de lรญnea de comandos muy popular en sistemas operativos basados en Unix, como GNU/Linux y macOS.
Es la โconsolaโ o โterminalโ que utilizamos para interactuar con el sistema operativo a travรฉs de comandos de texto.
Cuando hablamos de Bash Scripting, nos referimos a la escritura de pequeรฑos (o grandes) programas, llamados scripts, para automatizar tareas dentro de un entorno Bash.
Aprender Bash Scripting es muy รบtil para cualquier persona que trabaje con Linux o macOS: desde desarrolladores y administradores de sistemas, hasta cientรญficos de datos o entusiastas de la informรกtica.
ยฟ๐๐จฬ๐ฆ๐จ ๐๐ฎ๐ง๐๐ข๐จ๐ง๐ ๐๐๐ฌ๐ก ๐๐๐ซ๐ข๐ฉ๐ญ๐ข๐ง๐ ?
๐. ๐๐ก๐๐๐๐ง๐ ๐๐ข๐ง๐
La primera lรญnea de muchos scripts de Bash es la llamada shebang:
#!/๐๐๐/๐๐๐๐
El #! indica al sistema que el archivo debe ser interpretado por el intรฉrprete de comandos que se especifica a continuaciรณn (en este caso, /bin/bash).
Es fundamental poner esta lรญnea al inicio de tu script para asegurar que se ejecute con Bash (o con el intรฉrprete que prefieras).
๐. ๐๐๐ซ๐ข๐๐๐ฅ๐๐ฌ
En Bash, para asignar valores a variables basta con usar el signo = sin espacios alrededor:
๐๐๐๐๐๐๐๐="๐ฑ๐๐"
๐๐๐๐๐๐๐๐=$3
username="Jay" almacena una cadena en la variable username.
filename=$3 toma el tercer argumento pasado al script y lo asigna a filename.
Para acceder al contenido de la variable, usamos "$username" o "$filename".
๐. ๐๐ง๐ญ๐ซ๐๐๐ ๐๐ ๐๐ฌ๐ฎ๐๐ซ๐ข๐จ (๐๐ฌ๐๐ซ ๐๐ง๐ฉ๐ฎ๐ญ)
Para solicitar datos al usuario, se emplea el comando read:
๐๐๐๐ -๐ "๐ฌ๐๐๐๐ ๐๐๐๐ ๐๐๐๐๐๐๐๐: " ๐๐๐๐
๐๐๐๐ "๐ผ๐๐๐๐๐๐๐: $๐๐๐๐"
read -p "Mensaje" mostrarรก el mensaje y luego aguardarรก a que el usuario introduzca un valor.
El valor ingresado se almacenarรก en la variable especificada (user en este ejemplo).
๐. ๐๐จ๐ง๐๐ข๐๐ข๐จ๐ง๐๐ฅ ๐ข๐
Los scripts de Bash permiten ejecutar distintas instrucciones segรบn condiciones definidas:
๐๐ [ "$๐ฌ๐ผ๐ฐ๐ซ" -๐๐ 0 ]; ๐๐๐๐
๐๐๐๐ "๐๐๐ ๐๐๐ ๐๐๐ ๐๐๐๐๐๐๐ ๐๐๐๐ ๐๐๐๐๐๐ ๐๐ ๐๐๐ ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๐๐๐ ๐๐๐๐."
๐๐๐๐
๐๐๐๐ "๐๐๐ ๐๐๐ ๐๐๐๐๐๐๐ ๐๐๐๐ ๐๐๐๐๐๐ ๐๐ ๐๐๐ ๐๐๐๐ ๐๐๐๐."
๐๐
[ "$EUID" -ne 0 ] comprueba si el identificador de usuario efectivo (EUID) no es 0, lo que implica que el script no se estรก ejecutando como root.
Si la condiciรณn es verdadera, se ejecuta el primer bloque de cรณdigo; de lo contrario, se ejecuta la clรกusula else.
๐. ๐๐ฎ๐๐ฅ๐๐ฌ (๐ ๐จ๐ซ ๐๐จ๐จ๐ฉ)
Los bucles permiten repetir un bloque de instrucciones varias veces. Por ejemplo, para contar hasta 5:
๐๐๐๐ "๐ช๐๐๐๐๐๐๐ ๐๐ 5:"
๐๐๐ ๐ ๐๐ {1..5}; ๐ ๐
๐๐๐๐ "$๐"
๐ ๐๐๐
{1..5} es una forma de generar una secuencia de nรบmeros del 1 al 5.
Cada vez que el bucle itera, la variable i toma uno de esos valores.
๐. ๐ ๐ฎ๐ง๐๐ข๐จ๐ง๐๐ฌ
En Bash, las funciones se definen para agrupar y reutilizar cรณdigo:
๐๐๐๐๐๐๐๐ ๐๐๐๐๐() {
๐๐๐๐ "๐ฏ๐๐๐๐, $1!"
}
๐๐๐๐๐ "๐จ๐๐๐๐"
function greet() { ... } declara la funciรณn greet.
$1 se refiere al primer parรกmetro que se le pasa a la funciรณn al invocarla.
Aquรญ, al ejecutar greet "Alice", la funciรณn imprimirรก "Hello, Alice!".
๐. ๐๐ฌ๐ญ๐ซ๐ฎ๐๐ญ๐ฎ๐ซ๐ ๐๐จ๐ง๐๐ข๐๐ข๐จ๐ง๐๐ฅ ๐๐๐ฌ๐
El comando case es รบtil para decidir entre varias opciones:
๐๐๐๐ "๐ฌ๐๐๐๐ ๐ ๐๐๐๐๐๐ ๐๐๐๐๐๐๐ 1 ๐๐๐ 2: "
๐๐๐๐ ๐๐๐
๐๐๐๐ $๐๐๐ ๐๐
1) ๐๐๐๐ "๐๐๐ ๐๐๐๐๐ ๐๐๐." ;;
2) ๐๐๐๐ "๐๐๐ ๐๐๐๐๐ ๐๐๐." ;;
*) ๐๐๐๐ "๐ฐ๐๐๐๐๐๐ ๐๐๐๐๐๐." ;;
๐๐๐๐
Se evalรบa la variable num contra cada patrรณn.
Si coincide con 1, se ejecuta el primer bloque; si coincide con 2, el segundo; de lo contrario, se muestra "Invalid choice."
๐. ๐๐ฉ๐๐ซ๐๐๐ข๐จ๐ง๐๐ฌ ๐๐จ๐ง ๐๐ซ๐๐ก๐ข๐ฏ๐จ๐ฌ
Podemos verificar si un archivo existe y si es un directorio con expresiones como -e y -d:
๐๐ [ -๐ "$๐๐๐๐๐๐๐๐" ] && [ -๐ "$๐๐๐๐๐๐๐๐" ]; ๐๐๐๐
๐๐๐๐ "๐ญ๐๐๐ ๐๐๐๐๏ฟฝ๏ฟฝ๐ ๐๐๐ ๐๐ ๐ ๐ ๐๐๐๐๐๐๐๐."
๐๐๐๐
๐๐๐๐ "๐ญ๐๐๐ ๐ ๐๐๐ ๐๐๐ ๐๐๐๐๐ ๐๐ ๐๐ ๐๐๐ ๐ ๐ ๐๐๐๐๐๐๐๐."
๐๐
-e verifica si el archivo existe.
-d comprueba si es un directorio.
๐. ๐๐ซ๐ ๐ฎ๐ฆ๐๐ง๐ญ๐จ๐ฌ ๐๐ง ๐๐ขฬ๐ง๐๐ ๐๐ ๐๐จ๐ฆ๐๐ง๐๐จ๐ฌ
Al llamar a un script de Bash, se pueden pasar argumentos adicionales que se capturan con $1, $2, $3, etc.:
๐๐๐๐ "๐ญ๐๐๐๐ ๐๐๐๐๐๐๐๐: $1"
๐๐๐๐ "๐บ๐๐๐๐๐ ๐๐๐๐๐๐๐๐: $2"
๐๐๐๐ "๐ฌ๐๐๐ ๐๐๐๐๐๐: $?"
$1 se refiere al primer argumento, $2 al segundo, etc.
$? representa el exit status del รบltimo comando ejecutado.
๐๐. ๐๐จฬ๐๐ข๐ ๐จ๐ฌ ๐๐ ๐๐๐ฅ๐ข๐๐ (๐๐ฑ๐ข๐ญ ๐๐ญ๐๐ญ๐ฎ๐ฌ ๐๐จ๐๐๐ฌ)
En Bash, cada comando devuelve un cรณdigo de salida (exit status) para indicar รฉxito o error:
๐๐๐ ๐๐๐๐๐๐๐๐๐๐๐-๐๐๐๐.๐๐๐ 2> /๐ ๐๐/๐๐๐๐
๐๐๐๐ "๐ฌ๐๐๐ ๐๐๐๐๐๐: $?"
Si cat no encuentra el archivo, devolverรก un cรณdigo distinto de 0.
$? ayuda a comprobar el resultado inmediatamente despuรฉs de un comando.
๐๐. ๐๐ซ๐ซ๐๐ฒ๐ฌ ๐๐ง๐๐๐ฑ๐๐๐จ๐ฌ (๐๐ง๐๐๐ฑ๐๐ ๐๐ซ๐ซ๐๐ฒ๐ฌ)
Bash permite trabajar con arrays indexados:
๐๐๐๐๐๐=("๐จ๐๐๐๐" "๐ถ๐๐๏ฟฝ๏ฟฝ๐๐" "๐ฉ๐๐๐๐๐")
๐๐๐๐ "๐ญ๐๐๐๐๐: ${๐๐๐๐๐๐[0]}"
fruits[0] es "Apple", fruits[1] es "Orange", y asรญ sucesivamente.
Para imprimir un elemento especรญfico, se usa ${fruits[indice]}.
๐๐. ๐๐ซ๐ซ๐๐ฒ๐ฌ ๐๐ฌ๐จ๐๐ข๐๐ญ๐ข๐ฏ๐จ๐ฌ (๐๐ฌ๐ฌ๐จ๐๐ข๐๐ญ๐ข๐ฏ๐ ๐๐ซ๐ซ๐๐ฒ๐ฌ)
Los arrays asociativos permiten usar cadenas como รญndices:
๐ ๐๐๐๐๐๐ -๐จ ๐๐๐๐๐๐๐๐
๐๐๐๐๐๐๐๐[๐ผ๐บ๐จ]="๐พ๐๐๐๐๐๐๐๐๐ ๐ซ.๐ช"
๐๐๐๐๐๐๐๐[๐ญ๐๐๐๐๐]="๐ท๐๐๐๐"
๐๐๐๐ "๐ช๐๐๐๐๐๐ ๐๐ ๐ญ๐๐๐๐๐: ${๐๐๐๐๐๐๐๐[๐ญ๐๐๐๐๐]}"
Gracias a declare -A, capitals es un array asociativo.
Asignamos valores a travรฉs de claves como capitals[USA], capitals[France], etc.
๐๐. ๐๐ฎ๐ฌ๐ญ๐ข๐ญ๐ฎ๐๐ข๐จฬ๐ง ๐๐ ๐๐จ๐ฆ๐๐ง๐๐จ๐ฌ (๐๐จ๐ฆ๐ฆ๐๐ง๐ ๐๐ฎ๐๐ฌ๐ญ๐ข๐ญ๐ฎ๐ญ๐ข๐จ๐ง)
Para capturar la salida de un comando y guardarla en una variable, se utiliza la sintaxis $(comando):
๐๐๐๐๐๐๐_๐ ๐๐๐=$(๐ ๐๐๐)
๐๐๐๐ "๐ป๐๐ ๐๐'๐ ๐ ๐๐๐ ๐๐: $๐๐๐๐๐๐๐_๐ ๐๐๐"
$(date) se sustituye por la salida del comando date, asignรกndola a current_date.
๐๐. ๐๐๐๐ข๐ซ๐๐๐๐ข๐จ๐ง๐๐ฌ ๐๐ง ๐๐ขฬ๐ง๐๐ ๐๐ ๐๐จ๐ฆ๐๐ง๐๐จ๐ฌ
Bash permite redirigir la entrada y salida de los procesos:
๐๐๐๐ "๐ป๐๐๐ ๐๐ ๐ ๐๐๐๐๐๐ ๐๐๐๐." > ๐๐๐๐๐๐๐.๐๐๐
๐๐๐๐ / -๐๐๐๐ ๐๐๐๐๐.๐๐๐ 2> /๐ ๐๐/๐๐๐๐
> redirige la salida estรกndar (stdout) a un archivo, sobreescribiรฉndolo.
2> redirige la salida de errores (stderr) a un archivo o dispositivo (en el ejemplo, /dev/null para desecharla).
๐๐. ๐๐ฉ๐๐ซ๐๐๐ข๐จ๐ง๐๐ฌ ๐๐ซ๐ข๐ญ๐ฆ๐ฬ๐ญ๐ข๐๐๐ฌ
Puedes realizar operaciones matemรกticas usando (( )) o $(( )):
๐๐๐๐๐๐=$(( 15 * 2 ))
๐๐๐๐ $๐๐๐๐๐๐
$(( 15 * 2 )) evalรบa la expresiรณn y asigna el resultado a result.
๐๐. ๐๐ฑ๐ฉ๐๐ง๐ฌ๐ข๐จฬ๐ง ๐๐ ๐๐๐ซ๐ฬ๐ฆ๐๐ญ๐ซ๐จ๐ฌ (๐๐๐ซ๐๐ฆ๐๐ญ๐๐ซ ๐๐ฑ๐ฉ๐๐ง๐ฌ๐ข๐จ๐ง)
La expansiรณn de parรกmetros se basa en distintas expresiones para manipular variables. Por ejemplo:
๐บ๐น๐ช="๐๐๐๐/๐๐/๐๐๐.๐๐๐"
๐ฉ๐จ๐บ๐ฌ๐ท๐จ๐ป๐ฏ=${๐บ๐น๐ช%%/*}
๐๐๐๐ $๐ฉ๐จ๐บ๐ฌ๐ท๐จ๐ป๐ฏ
${variable%%patrรณn} elimina lo que coincide con el patrรณn mรกs extenso a la derecha.
Aquรญ, ${SRC%%/*} cortarรญa la ruta path/to/foo.cpp quedรกndose con path.
๐๐. ๐๐๐ง๐๐ฃ๐จ ๐๐ ๐๐๐งฬ๐๐ฅ๐๐ฌ (๐๐ซ๐จ๐๐๐ฌ๐ฌ ๐๐ข๐ ๐ง๐๐ฅ ๐๐๐ง๐๐ฅ๐ข๐ง๐ )
Bash provee la funciรณn trap para capturar seรฑales y ejecutar acciones especรญficas cuando sucedan:
๐๐๐๐ '๐๐๐๐ "๐น๐๐๐๐๐๐๐ ๐บ๐ฐ๐ฎ๐ป๐ฌ๐น๐ด ๐๐๐๐๐๐. ๐ช๐๐๐๐๐๐๐ ๐๐..."; ๐๐๐๐' ๐บ๐ฐ๐ฎ๐ป๐ฌ๐น๐ด
Cuando el script reciba una seรฑal SIGTERM (por ejemplo, si se intenta detener el proceso), este comando ejecutarรก el mensaje y luego finalizarรก el script.
๐๐. ๐๐จ๐ฆ๐๐ง๐ญ๐๐ซ๐ข๐จ๐ฌ
Finalmente, en Bash podemos usar:
# para comentarios de una sola lรญnea.
: ' ... ' o <<COMMENT ... COMMENT para comentarios de varias lรญneas.
# ๐ฌ๐๐๐ ๐๐ ๐๐ ๐๐๐๐๐๐๐๐๐๐ ๐ ๐ ๐๐๐ ๐๐๐๐ ๐๐ฬ๐๐๐
: '
๐ฌ๐๐๐ ๐๐ ๐๐ ๐๐๐๐๐๐๐๐๐๐
๐ ๐ ๐๐ฬ๐๐๐๐๐๐๐ ๐๐ฬ๐๐๐๐
'