🛠️ Parámetros del script
🧾 Parámetros
Este script acepta las siguientes opciones desde la terminal:
| Opción | Descripción |
|---|---|
-m <nombre> |
Buscar una máquina por su nombre |
-i <IP> |
Buscar una máquina por su dirección IP |
-y <máquina> |
Obtener el link de resolución (writeup) de una máquina |
-o <sistema_operativo> |
Buscar máquinas por sistema operativo (ej. Linux, Windows) |
-s <skills> |
Buscar máquinas por skill o categoría (ej. web, crypto, pwn) |
-d <nivel> |
Filtrar máquinas por nivel de dificultad (ej. Fácil, Medio, Difícil, Insane) |
-u |
Comprobar si hay actualizaciones disponibles y actualizar la base de datos (bundle.js) |
-h |
Mostrar el panel de ayuda con todos los comandos disponibles |
⚠️ Si se pasa una opción inválida o no reconocida, se muestra automáticamente el panel de ayuda (helpPanel).
🧩 Explicación del código paso a paso
📘 Función Panel de ayuda
# Panel de ayuda
function helpPanel() {
echo -e "\n${yellowColour}[+] Uso:${endColour}"
echo -e "\t${purpleColour}-m <máquina>${endColour} → Buscar máquina por nombre"
echo -e "\t${purpleColour}-i <IP>${endColour} → Buscar la máquina por IP "
echo -e "\t${purpleColour}-y <máquina>${endColour} → Obtener link de la resolución de la máquina "
echo -e "\t${purpleColour}-o <sistema_operativo>${endColour} → Buscar máquina por sistema operativo "
echo -e "\t${purpleColour}-s <skills>${endColour} → Buscar máquina por skills"
echo -e "\t${purpleColour}-d <nivel>${endColour} → Filtra por dificultad "
echo -e "\t${purpleColour}-u${endColour} → Comprobar y actualizar"
echo -e "\t${purpleColour}-h${endColour} → Mostrar este panel de ayuda\n"
}
- Define una función
helpPanelque imprime las instrucciones de uso del script con colores. - Se llama cuando el usuario pide ayuda (
-h) o si hay un error de uso.
⚙️ Parseo de opciones con getopts
# Indicadores y lógica principal
declare -i parameter_counter=0
# Chivatos
declare -i chivato_difficulty=0
declare -i chivato_os=0
while getopts "m:i:y:d:o:s:hu" arg; do
case $arg in
m) machineName=$OPTARG; let parameter_counter+=1;;
u) let parameter_counter+=2;;
i) ipAddress=$OPTARG; let parameter_counter+=3;;
y) machineName=$OPTARG; let parameter_counter+=4;;
d) nivel=$OPTARG; chivato_difficulty=1; let parameter_counter+=5;;
o) so=$OPTARG; chivato_os=1; let parameter_counter+=6;;
s) skills=$OPTARG; let parameter_counter+=7;;
h) ;;
esac
done
🔍 ¿Qué hace esta sección?
-
Utiliza
getoptspara leer los parámetros de entrada pasados al script desde la terminal. -
El string
"m:i:y:d:o:s:hu"define las opciones válidas:-
Las letras seguidas de
:(comom:,i:...) requieren un argumento. -
Las letras sin
:(h,u) no requieren argumento.
-
🧠 ¿Cómo funciona parameter_counter?
-
Cada opción válida suma un valor distinto al contador
parameter_counter. -
Este contador se usa después para determinar qué función debe ejecutarse.
-
Por ejemplo:
-
Si el contador vale
1, significa que se usó-m→ se busca por nombre. -
Si vale
3, se usó-i→ se busca por IP. -
Si vale
6, se usó-o→ se filtra por sistema operativo.
-
🧪 ¿Y los chivatos?
-
Los "chivatos" (
chivato_difficulty,chivato_os) se activan si se usa-do-o. -
Esto permite detectar si el usuario ha combinado ambos, para así ejecutar una función especial como
getOsDifficultyMachines.
💥 ¿Qué pasa si se usa una opción no reconocida?
-
Si
getoptsencuentra un parámetro inválido, no entra en elcase, y el contador no aumenta. -
Luego, si el contador queda en
0, el script muestra automáticamente el panel de ayuda conhelpPanel.
🧩 ¿Cómo funciona la ejecución de funciones según parameter_counter?
if [ $parameter_counter -eq 1 ]; then
searchMachine "$machineName"
elif [ $parameter_counter -eq 2 ]; then
updateFiles
elif [ $parameter_counter -eq 3 ]; then
searchIP "$ipAddress"
elif [ $parameter_counter -eq 4 ]; then
getYoutubeLink "$machineName"
elif [ $parameter_counter -eq 5 ]; then
filtrar_nivel $nivel
elif [ $parameter_counter -eq 6 ]; then
searchSo $so
elif [ $chivato_difficulty -eq 1 ] && [ $chivato_os -eq 1 ] ; then
getOsDifficultyMachines $nivel $so
elif [ $parameter_counter -eq 7 ]; then
searchSkills "$skills"
else
helpPanel
fi
Después de usar getopts para leer los parámetros, el valor de parameter_counter determina qué función ejecutar:
-
Si el contador es
1: EjecutasearchMachinecon el nombre de la máquina (-m). -
Si el contador es
2: EjecutaupdateFiles(-u). -
Si el contador es
3: EjecutasearchIPcon la IP (-i). -
Si el contador es
4: EjecutagetYoutubeLinkcon el nombre de la máquina (-y). -
Si el contador es
5: Ejecutafiltrar_nivelcon el nivel de dificultad (-d). -
Si el contador es
6: EjecutasearchSocon el sistema operativo (-o). -
Si ambos chivatos están activos (
-dy-o): EjecutagetOsDifficultyMachinescon el nivel y sistema operativo. -
Si el contador es
7: EjecutasearchSkillscon las habilidades (-s). -
Si no se pasó ningún parámetro válido: Muestra el panel de ayuda con
helpPanel.
💻 Ejemplos de uso

📘 Resumen de uso y funciones del script
Si quieres entender cómo funciona esta búsqueda o cómo se conecta con otras funcionalidades, consulta la explicación completa del script aquí:
🧩 Explicación de las funciones del script#🎯 **Buscar por Habilidades (Skills)
📘 Ver las explicaciones de las funciones:
- 🔍 Buscar por nombre de la máquina
- 🌐 Buscar por IP
- 🔗 Link de resolución en YouTube
- ⚡ Filtrar por dificultad
- 🐧 Filtrar por sistema operativo]
- 🔥 Filtrar por OS y dificultad
- 🛠️ Filtrar por habilidades
💡 Para ver ejemplos prácticos de uso: 💡 Ejemplo de uso
📜 Para obtener el script completo: 📜 Script Completo htbmachines.sh