Add first scripts
This commit is contained in:
parent
ddeea8beb4
commit
3cd7b9bfaf
110
01_bash/actualizar.sh
Executable file
110
01_bash/actualizar.sh
Executable file
@ -0,0 +1,110 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Script: actualizar.sh
|
||||
# Descripción: Este script de bash tiene como objetivo actualizar y limpiar un
|
||||
# sistema Linux. Utiliza colores para mensajes y maneja la salida
|
||||
# de forma controlada con Ctrl + C. Presenta títulos para cada
|
||||
# sección, como la limpieza de paquetes innecesarios, la
|
||||
# actualización de repositorios y la actualización de paquetes
|
||||
# snap. Además, solicita confirmación antes de realizar ciertas
|
||||
# operaciones, como la actualización de paquetes. La última sección
|
||||
# agradece al usuario por mantener su sistema actualizado.
|
||||
# Author: Manuel Vergara
|
||||
# Web: https://vergaracarmona.es
|
||||
#
|
||||
|
||||
# Colores
|
||||
COLOR_RED='\e[31m'
|
||||
COLOR_BLUE='\e[34m'
|
||||
COLOR_RESET='\e[0m'
|
||||
|
||||
# Control de salida con Ctrl + C
|
||||
function ctrl_c() {
|
||||
echo -e "${COLOR_RED}\n\n[!] Saliendo... \n${COLOR_RESET}"
|
||||
tput cnorm
|
||||
log_message "El script se ha detenido debido a una interrupción del usuario."
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Ctrl+C
|
||||
trap ctrl_c SIGINT
|
||||
|
||||
# Títulos
|
||||
function print_title {
|
||||
local title="$1"
|
||||
local title_length=${#title}
|
||||
local total_length=22
|
||||
|
||||
# Calcular el tamaño del margen izquierdo y derecho
|
||||
local margin_length=$(((total_length - title_length - 4) / 2))
|
||||
|
||||
# Asegurarse de que el número total de almohadillas sea siempre 22
|
||||
local left_padding=$((margin_length))
|
||||
local right_padding=$((margin_length + (title_length % 2)))
|
||||
|
||||
echo -e "${COLOR_BLUE}\n$(printf '#%.0s' $(seq 1 $left_padding))#### $title ####$(printf '#%.0s' $(seq 1 $right_padding))\n${COLOR_RESET}"
|
||||
}
|
||||
|
||||
# Verificar permisos de superusuario
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo "Este script debe ejecutarse con privilegios de superusuario."
|
||||
log_message "Error: Este script debe ejecutarse con privilegios de superusuario."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Logging
|
||||
LOG_FILE="/var/log/linux_update_script.log"
|
||||
|
||||
function log_message() {
|
||||
local message="$1"
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') - $message" >>"$LOG_FILE"
|
||||
}
|
||||
|
||||
log_message "Iniciando el script de actualización y limpieza."
|
||||
|
||||
print_title "ANEM A ACTUALITZAR"
|
||||
|
||||
print_title "AUTOREMOVE"
|
||||
|
||||
sudo apt-get autoremove -y
|
||||
|
||||
print_title "AUTOCLEAN"
|
||||
|
||||
sudo apt-get autoclean
|
||||
|
||||
print_title "UPDATE REPOS"
|
||||
|
||||
sudo apt-get update
|
||||
|
||||
upgradable=$(apt-get -s dist-upgrade | grep "^Inst")
|
||||
|
||||
if [[ -n "$upgradable" ]]; then
|
||||
echo -e "\nS'han trobat actualitzacions disponibles: "
|
||||
apt list --upgradable
|
||||
read -p "¿Vols actualitzar els paquets? (s/n) " confirm
|
||||
if [[ "$confirm" == "s" ]]; then
|
||||
sudo apt-get upgrade -y
|
||||
echo -e "\nActualitzacions fetes"
|
||||
fi
|
||||
else
|
||||
echo "No hi ha actualitzacions disponibles amb el gestor de paquets \"apt\"."
|
||||
fi
|
||||
|
||||
print_title "ACTUALITZEM SNAPs"
|
||||
|
||||
refresh_list=$(sudo snap refresh --list)
|
||||
|
||||
if [[ -n "$refresh_list" ]]; then
|
||||
echo -e "\nS'han trobat actualitzacions disponibles:"
|
||||
echo "$refresh_list"
|
||||
read -p "¿Vols actualitzar els paquets? (s/n) " confirm
|
||||
if [[ "$confirm" == "s" ]]; then
|
||||
sudo snap refresh
|
||||
fi
|
||||
else
|
||||
echo "No hi ha actualitzacions disponibles amb el gestor de paquets \"snap\"."
|
||||
fi
|
||||
|
||||
log_message "El script se ha ejecutado correctamente."
|
||||
|
||||
print_title "GRACIES PER ACTUALITZAR EL SISTEMA"
|
71
01_bash/calculadora.sh
Executable file
71
01_bash/calculadora.sh
Executable file
@ -0,0 +1,71 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Script: calculadora.sh
|
||||
# Descripción: Este script realiza operaciones matemáticas básicas
|
||||
# (suma, resta, multiplicación, división) con dos valores ingresados por el usuario.
|
||||
# Author: Manuel Vergara
|
||||
# Web: https://vergaracarmona.es
|
||||
#
|
||||
|
||||
COLOR_RED='\033[0;31m'
|
||||
COLOR_RESET='\033[0m'
|
||||
|
||||
# Control de salida con Ctrl + C
|
||||
function ctrl_c() {
|
||||
echo -e "${COLOR_RED}\n\n[!] Saliendo... \n${COLOR_RESET}"
|
||||
tput cnorm; exit 1
|
||||
}
|
||||
|
||||
# Ctrl+C
|
||||
trap ctrl_c SIGINT
|
||||
|
||||
# Función para limpiar la pantalla
|
||||
limpiar_pantalla() {
|
||||
clear
|
||||
}
|
||||
|
||||
# Función para mostrar el mensaje inicial
|
||||
mensaje_inicial() {
|
||||
echo "Soy GNU/cal"
|
||||
sleep 1
|
||||
echo "Tú me dices lo que quieres calcular y yo te doy el resultado"
|
||||
sleep 1
|
||||
}
|
||||
|
||||
# Función para solicitar un valor al usuario
|
||||
solicitar_valor() {
|
||||
echo -e "\nIntroduce $1 valor"
|
||||
read -r "$2"
|
||||
}
|
||||
|
||||
# Función para solicitar el operador al usuario
|
||||
solicitar_operador() {
|
||||
echo -e "\nIntroduce el operador. Puedes escoger entre: + - / *"
|
||||
read -r operador
|
||||
}
|
||||
|
||||
# Función para realizar el cálculo y mostrar el resultado
|
||||
calcular_resultado() {
|
||||
echo -e "\nEl resultado es: "
|
||||
sleep 1
|
||||
resultado="$1 $2 $3"
|
||||
echo -e "$((resultado)) \n"
|
||||
sleep 0.5
|
||||
}
|
||||
|
||||
# Función para mostrar el agradecimiento
|
||||
mensaje_final() {
|
||||
echo "Gracias por su tiempo"
|
||||
}
|
||||
|
||||
# Main
|
||||
|
||||
limpiar_pantalla
|
||||
mensaje_inicial
|
||||
|
||||
solicitar_valor "el primer" valor1
|
||||
solicitar_operador
|
||||
solicitar_valor "el segundo" valor2
|
||||
|
||||
calcular_resultado "$valor1" "$operador" "$valor2"
|
||||
mensaje_final
|
8
01_bash/clean-snap.sh
Executable file
8
01_bash/clean-snap.sh
Executable file
@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
# Removes old revisions of snaps
|
||||
# CLOSE ALL SNAPS BEFORE RUNNING THIS
|
||||
set -eu
|
||||
snap list --all | awk '/disabled/{print $1, $3}' |
|
||||
while read snapname revision; do
|
||||
snap remove "$snapname" --revision="$revision"
|
||||
done
|
92
01_bash/create-kind-ingress--2workers.sh
Executable file
92
01_bash/create-kind-ingress--2workers.sh
Executable file
@ -0,0 +1,92 @@
|
||||
#!/bin/sh
|
||||
set -o errexit
|
||||
|
||||
# Script: create_kind_cluster.sh
|
||||
# Descripción: Este script automatiza la creación de un clúster de Kubernetes utilizando Kind (Kubernetes en Docker).
|
||||
# También configura un registro Docker local y lo conecta al clúster para permitir el uso de un registro local
|
||||
# para las imágenes de contenedor. Además, instala el controlador Ingress NGINX en el clúster para manejar recursos de ingreso.
|
||||
# Author: Manuel Vergara
|
||||
# Web: https://vergaracarmona.es
|
||||
#
|
||||
|
||||
|
||||
COLOR_RED='\033[0;31m'
|
||||
COLOR_RESET='\033[0m'
|
||||
|
||||
# Control de salida con Ctrl + C
|
||||
function ctrl_c() {
|
||||
echo -e "${COLOR_RED}\n\n[!] Saliendo... \n${COLOR_RESET}"
|
||||
tput cnorm; exit 1
|
||||
}
|
||||
|
||||
# Ctrl+C
|
||||
trap ctrl_c SIGINT
|
||||
|
||||
|
||||
# Función para configurar el registro Docker local
|
||||
configurar_registro_local() {
|
||||
reg_name='kind-registry'
|
||||
reg_port='5001'
|
||||
|
||||
if [ "$(docker inspect -f '{{.State.Running}}' "${reg_name}" 2>/dev/null || true)" != 'true' ]; then
|
||||
docker run -d --restart=always -p "127.0.0.1:${reg_port}:5000" --name "${reg_name}" registry:2
|
||||
fi
|
||||
|
||||
if [ "$(docker inspect -f='{{json .NetworkSettings.Networks.kind}}' "${reg_name}")" = 'null' ]; then
|
||||
docker network connect "kind" "${reg_name}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Función para documentar el registro local
|
||||
documentar_registro_local() {
|
||||
reg_port='5001'
|
||||
echo "\nConfigurando el registro local...\n"
|
||||
cat <<EOF | kubectl apply -f -
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: local-registry-hosting
|
||||
namespace: kube-public
|
||||
data:
|
||||
localRegistryHosting.v1: |
|
||||
host: "localhost:${reg_port}"
|
||||
help: "https://kind.sigs.k8s.io/docs/user/local-registry/"
|
||||
EOF
|
||||
}
|
||||
|
||||
# Función para instalar el controlador Ingress NGINX
|
||||
instalar_ingress_nginx() {
|
||||
echo "\nInstalando el controlador Ingress NGINX...\n"
|
||||
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
|
||||
}
|
||||
|
||||
# Main
|
||||
configurar_registro_local
|
||||
kind create cluster --config=- <<EOF
|
||||
kind: Cluster
|
||||
apiVersion: kind.x-k8s.io/v1alpha4
|
||||
containerdConfigPatches:
|
||||
- |-
|
||||
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."localhost:5001"]
|
||||
endpoint = ["http://kind-registry:5000"]
|
||||
nodes:
|
||||
- role: control-plane
|
||||
kubeadmConfigPatches:
|
||||
- |
|
||||
kind: InitConfiguration
|
||||
nodeRegistration:
|
||||
kubeletExtraArgs:
|
||||
node-labels: "ingress-ready=true"
|
||||
extraPortMappings:
|
||||
- containerPort: 80
|
||||
hostPort: 80
|
||||
protocol: TCP
|
||||
- containerPort: 443
|
||||
hostPort: 443
|
||||
protocol: TCP
|
||||
- role: worker
|
||||
- role: worker
|
||||
EOF
|
||||
|
||||
documentar_registro_local
|
||||
instalar_ingress_nginx
|
40
01_bash/curlman.sh
Executable file
40
01_bash/curlman.sh
Executable file
@ -0,0 +1,40 @@
|
||||
# /bin/bash
|
||||
|
||||
# Script: check_http_status.sh
|
||||
# Descripción: Este script verifica el código de estado HTTP de una o varias URL.
|
||||
# Si se proporciona un archivo de texto como argumento, lee las URL del archivo y muestra
|
||||
# los códigos de estado HTTP de cada una. Si se proporciona una URL directamente como argumento,
|
||||
# muestra el código de estado HTTP de esa URL específica.
|
||||
# Author: Manuel Vergara
|
||||
# Web: https://vergaracarmona.es
|
||||
#
|
||||
|
||||
COLOR_RED='\033[0;31m'
|
||||
COLOR_RESET='\033[0m'
|
||||
|
||||
# Control de salida con Ctrl + C
|
||||
function ctrl_c() {
|
||||
echo -e "${COLOR_RED}\n\n[!] Saliendo... \n${COLOR_RESET}"
|
||||
tput cnorm; exit 1
|
||||
}
|
||||
|
||||
# Ctrl+C
|
||||
trap ctrl_c SIGINT
|
||||
|
||||
# Función para verificar el código de estado HTTP de una URL
|
||||
verificar_codigo_estado() {
|
||||
local url="$1"
|
||||
local code_web=$(curl -L --write-out "%{http_code}\n" --silent --output /dev/null "$url")
|
||||
echo "La web $url devuelve el código de error $code_web"
|
||||
}
|
||||
|
||||
# Main
|
||||
if [ "${1##*.}" == "txt" ]; then
|
||||
# Si se proporciona un archivo de texto, leer las URL y verificar los códigos de estado HTTP
|
||||
while read -r line; do
|
||||
verificar_codigo_estado "$line"
|
||||
done < "$1"
|
||||
else
|
||||
# Si se proporciona una URL directamente, verificar el código de estado HTTP
|
||||
verificar_codigo_estado "$1"
|
||||
fi
|
100
01_bash/install_list_asdf.sh
Executable file
100
01_bash/install_list_asdf.sh
Executable file
@ -0,0 +1,100 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Script: install_list_asdf.sh
|
||||
# Descripción: Este script automatiza la gestión de programas y versiones
|
||||
# utilizando asdf, asegurándose de que los plugins estén
|
||||
# instalados, con las últimas versiones instaladas y correctamente
|
||||
# configuradas en global. Según lo especificado en el archivo
|
||||
# "lista_programas.txt".
|
||||
# Author: Manuel Vergara
|
||||
# Web: https://vergaracarmona.es
|
||||
#
|
||||
|
||||
|
||||
COLOR_RED='\033[0;31m'
|
||||
COLOR_RESET='\033[0m'
|
||||
|
||||
# Control de salida con Ctrl + C
|
||||
function ctrl_c() {
|
||||
echo -e "${COLOR_RED}\n\n[!] Saliendo... \n${COLOR_RESET}"
|
||||
tput cnorm; exit 1
|
||||
}
|
||||
|
||||
# Ctrl+C
|
||||
trap ctrl_c SIGINT
|
||||
|
||||
# Archivo de entrada que contiene la lista de programas
|
||||
input_file="lista_programas.txt"
|
||||
|
||||
# Función para agregar un plugin asdf si no está agregado
|
||||
add_asdf_plugin() {
|
||||
local plugin="$1"
|
||||
if ! asdf plugin list | grep -q "$plugin"; then
|
||||
asdf plugin add "$plugin"
|
||||
fi
|
||||
}
|
||||
|
||||
# Función para instalar una versión de un programa con asdf si no está instalada
|
||||
install_asdf_version() {
|
||||
local program="$1"
|
||||
local version="$2"
|
||||
local installed_versions=$(asdf list "$program" | tr -d ' ')
|
||||
|
||||
if [ -z "$installed_versions" ]; then
|
||||
echo -e "\e[33mNo está instalada la versión $version de $program y se procede a hacerlo\e[0m"
|
||||
asdf install "$program" "$version" >/dev/null 2>&1
|
||||
local exit_code=$?
|
||||
if [ $exit_code -eq 0 ]; then
|
||||
echo -e "\e[32mInstalación exitosa: $program $version\e[0m"
|
||||
else
|
||||
echo -e "\e[31mError al instalar $program $version\e[0m"
|
||||
fi
|
||||
else
|
||||
if ! echo "$installed_versions" | grep -q "$version"; then
|
||||
echo -e "\e[33mNo está instalada la versión $version de $program y se procede a hacerlo\e[0m"
|
||||
asdf install "$program" "$version" >/dev/null 2>&1
|
||||
local exit_code=$?
|
||||
if [ $exit_code -eq 0 ]; then
|
||||
echo -e "\e[32mInstalación exitosa: $program $version\e[0m"
|
||||
else
|
||||
echo -e "\e[31mError al instalar $program $version\e[0m"
|
||||
fi
|
||||
else
|
||||
echo -e "\e[32m$program ya está instalado con la versión $version\e[0m"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Función para configurar globalmente una versión de un programa con asdf si no está configurada
|
||||
configure_asdf_global() {
|
||||
local program="$1"
|
||||
local version="$2"
|
||||
local current_version=$(asdf current "$program" | awk '{print $2}')
|
||||
if [ "$current_version" != "$version" ]; then
|
||||
asdf global "$program" "$version"
|
||||
echo -e "\e[32mConfiguración global exitosa de $program $version\e[0m"
|
||||
fi
|
||||
}
|
||||
|
||||
# Función para imprimir un salto de línea
|
||||
print_newline() {
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Recorre el archivo de entrada
|
||||
while IFS= read -r program; do
|
||||
add_asdf_plugin "$program"
|
||||
latest_version=$(asdf latest "$program" 2>&1)
|
||||
if [ $? -eq 0 ]; then
|
||||
install_asdf_version "$program" "$latest_version"
|
||||
configure_asdf_global "$program" "$latest_version"
|
||||
else
|
||||
echo -e "\e[31mError al obtener la última versión de $program: $latest_version\e[0m"
|
||||
fi
|
||||
print_newline
|
||||
done < "$input_file"
|
||||
|
||||
# Listar las instalaciones actuales
|
||||
echo -e "\nListado de instalaciones actuales:"
|
||||
list_asdf_current
|
||||
|
28
01_bash/line_color.sh
Executable file
28
01_bash/line_color.sh
Executable file
@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
|
||||
BLACK="\033[30m"
|
||||
RED="\033[31m"
|
||||
GREEN="\033[32m"
|
||||
YELLOW="\033[33m"
|
||||
BLUE="\033[34m"
|
||||
PINK="\033[35m"
|
||||
CYAN="\033[36m"
|
||||
WHITE="\033[37m"
|
||||
NORMAL="\033[39m"
|
||||
|
||||
echo -e $(cat <<EOF
|
||||
$ this text is red\n
|
||||
$BLACK this text is black\n
|
||||
$RED this text is red\n
|
||||
$GREEN this text is green\n
|
||||
$YELLOW this text is yellow\n
|
||||
$BLUE this text is blue\n
|
||||
$PINK this text is pink\n
|
||||
$CYAN this text is cyan\n
|
||||
$WHITE this text is \n
|
||||
$NORMAL and this is normal\n
|
||||
EOF
|
||||
)
|
||||
|
||||
ver=$(ls)
|
||||
echo -e "$RED$ver"
|
20
01_bash/line_color_dictionary.sh
Executable file
20
01_bash/line_color_dictionary.sh
Executable file
@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
|
||||
declare -A COLORS
|
||||
|
||||
COLORS+=(
|
||||
["BLACK"]="\033[30m"
|
||||
["RED"]="\033[31m"
|
||||
["GREEN"]="\033[32m"
|
||||
["YELLOW"]="\033[33m"
|
||||
["BLUE"]="\033[34m"
|
||||
["PINK"]="\033[35m"
|
||||
["CYAN"]="\033[36m"
|
||||
["WHITE"]="\033[37m"
|
||||
["NORMAL"]="\033[39m"
|
||||
)
|
||||
|
||||
for key in ${!COLORS[@]}
|
||||
do
|
||||
echo -e "${COLORS[${key}]} this text is ${key}"
|
||||
done
|
25
01_bash/lineas_fichero.sh
Executable file
25
01_bash/lineas_fichero.sh
Executable file
@ -0,0 +1,25 @@
|
||||
#! /bin/bash
|
||||
|
||||
# Colores
|
||||
BLUE="\033[34m"
|
||||
RED="\033[31m"
|
||||
NOCOLOR="\033[0m"
|
||||
|
||||
|
||||
# Control de salida con Ctrl + C
|
||||
function ctrl_c() {
|
||||
echo -e "${RED}\n\n[!] Saliendo... \n${NOCOLOR}"
|
||||
tput cnorm; exit 1
|
||||
}
|
||||
|
||||
# Ctrl+C
|
||||
trap ctrl_c SIGINT
|
||||
|
||||
# Main
|
||||
for fichero in $(ls); do
|
||||
if [[ -f "$fichero" ]]; then
|
||||
cuenta=$(cat "$fichero" | wc -l)
|
||||
echo -e "El fichero ${BLUE}$fichero ${NOCOLOR}tiene ${RED}$cuenta ${NOCOLOR}lineas"
|
||||
fi
|
||||
done
|
||||
|
35
01_bash/open-list-url.sh
Executable file
35
01_bash/open-list-url.sh
Executable file
@ -0,0 +1,35 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Script: open-list-url.sh
|
||||
# Descripción: El script actual se encarga de leer un archivo de enlaces línea
|
||||
# por línea y abrir cada enlace utilizando el navegador web Firefox.
|
||||
# Author: Manuel Vergara
|
||||
# Web: https://vergaracarmona.es
|
||||
#
|
||||
|
||||
COLOR_RED='\033[0;31m'
|
||||
COLOR_RESET='\033[0m'
|
||||
|
||||
# Control de salida con Ctrl + C
|
||||
function ctrl_c() {
|
||||
echo -e "${COLOR_RED}\n\n[!] Saliendo... \n${COLOR_RESET}"
|
||||
tput cnorm
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Ctrl+C
|
||||
trap ctrl_c SIGINT
|
||||
|
||||
# Si se proporciona el archivo de enlaces como argumento
|
||||
if [ $# -eq 0 ]; then
|
||||
echo "Uso: $0 archivo_enlaces.txt"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Lee el archivo de enlaces línea por línea y abre cada enlace
|
||||
while IFS= read -r enlace; do
|
||||
echo "Abriendo enlace: $enlace"
|
||||
firefox "$enlace"
|
||||
done <"$1"
|
||||
|
||||
echo "Proceso completado."
|
20
01_bash/pregunta.sh
Executable file
20
01_bash/pregunta.sh
Executable file
@ -0,0 +1,20 @@
|
||||
#! /bin/bash
|
||||
|
||||
echo "Hola $(whoami)"
|
||||
|
||||
while true; do
|
||||
read -rp "dime si o no (s/n) " respuesta
|
||||
|
||||
case $respuesta in
|
||||
[sS])
|
||||
echo "La respuesta es sí"
|
||||
break
|
||||
;;
|
||||
[Nn])
|
||||
echo "La respuesta es No"
|
||||
exit
|
||||
;;
|
||||
*) echo "Que me estas container" ;;
|
||||
esac
|
||||
|
||||
done
|
14
01_bash/prueba.sh
Executable file
14
01_bash/prueba.sh
Executable file
@ -0,0 +1,14 @@
|
||||
#! /bin/bash
|
||||
|
||||
x=10
|
||||
while [ $x -ge 0 ]
|
||||
do
|
||||
echo $x
|
||||
x=$(($x-1))
|
||||
done
|
||||
|
||||
echo ""
|
||||
|
||||
for i in {10..0}; do
|
||||
echo "$i"
|
||||
done
|
207
01_bash/pruebaRed.sh
Executable file
207
01_bash/pruebaRed.sh
Executable file
@ -0,0 +1,207 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Colores
|
||||
COLOR_GREEN='\e[32m'
|
||||
COLOR_RED='\e[31m'
|
||||
COLOR_YELLOW='\e[33m'
|
||||
COLOR_BLUE='\e[34m'
|
||||
COLOR_RESET='\e[0m'
|
||||
|
||||
# Control de salida con Ctrl + C
|
||||
function ctrl_c() {
|
||||
echo -e "${COLOR_RED}\n\n[!] Saliendo... \n${COLOR_RESET}"
|
||||
tput cnorm; exit 1
|
||||
}
|
||||
|
||||
# Ctrl+C
|
||||
trap ctrl_c SIGINT
|
||||
|
||||
# Títulos
|
||||
function print_title {
|
||||
local title="$1"
|
||||
local title_length=${#title}
|
||||
local total_length=22
|
||||
|
||||
# Calcular el tamaño del margen izquierdo y derecho
|
||||
local margin_length=$(( (total_length - title_length - 4) / 2 ))
|
||||
|
||||
# Asegurarse de que el número total de almohadillas sea siempre 22
|
||||
local left_padding=$(( margin_length ))
|
||||
local right_padding=$(( margin_length + (title_length % 2) ))
|
||||
|
||||
echo -e "${COLOR_BLUE}\n$(printf '#%.0s' $(seq 1 $left_padding))#### $title ####$(printf '#%.0s' $(seq 1 $right_padding))\n${COLOR_RESET}"
|
||||
}
|
||||
|
||||
# Función para imprimir información de red
|
||||
print_network_info() {
|
||||
local interface=$1
|
||||
local ip_lan_4=$(ip addr show "$interface" | grep 'inet ' | awk '{print $2}')
|
||||
local ip_lan_6=$(ip addr show "$interface" | grep 'inet6' | awk '{print $2}')
|
||||
|
||||
if [ -z "$ip_lan_4" ] && [ -z "$ip_lan_6" ]; then
|
||||
printf "${COLOR_BLUE}|${COLOR_RESET}${COLOR_YELLOW} %-16s ${COLOR_RESET}${COLOR_BLUE}|${COLOR_RESET} ${COLOR_RED}%-35s ${COLOR_RESET}${COLOR_BLUE}|${COLOR_RESET}\n" "$interface" "No tiene"
|
||||
else
|
||||
printf "${COLOR_BLUE}|${COLOR_RESET}${COLOR_YELLOW} %-16s ${COLOR_RESET}${COLOR_BLUE}|${COLOR_RESET} ${COLOR_GREEN}%-35s ${COLOR_RESET}${COLOR_BLUE}|${COLOR_RESET}\n" "$interface" "IPv4: $ip_lan_4"
|
||||
if [ -n "$ip_lan_6" ]; then
|
||||
printf "${COLOR_BLUE}|${COLOR_RESET} %-16s ${COLOR_BLUE}|${COLOR_RESET} ${COLOR_GREEN}%-35s ${COLOR_RESET}${COLOR_BLUE}|${COLOR_RESET}\n" "" "IPv6: $ip_lan_6"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Función para imprimir la tabla de información de red
|
||||
print_network_table() {
|
||||
echo -e "\n${COLOR_BLUE}| Interfaz | IP |${COLOR_RESET}"
|
||||
echo -e "${COLOR_BLUE}| ---------------- | ----------------------------------- |${COLOR_RESET}"
|
||||
|
||||
for row in "${network_info[@]}"; do
|
||||
echo -e "$row"
|
||||
done
|
||||
|
||||
echo -e "${COLOR_BLUE}| ---------------- | ----------------------------------- |${COLOR_RESET}"
|
||||
}
|
||||
|
||||
# Comprobación de dependencias
|
||||
check_dependencies() {
|
||||
for cmd in "jq" "nordvpn" "speedtest"; do
|
||||
command -v "$cmd" >/dev/null 2>&1 || { echo >&2 "${COLOR_RED}$cmd no está instalado. Instálalo con 'sudo apt-get install $cmd'${COLOR_RESET}"; exit 1; }
|
||||
done
|
||||
}
|
||||
|
||||
# Función para obtener la IP del router
|
||||
get_router_ip() {
|
||||
local interface=$1
|
||||
ip route show dev "$interface" | grep default | awk '{print $3}'
|
||||
}
|
||||
|
||||
# Inicializar el array para almacenar información de red
|
||||
network_info=()
|
||||
|
||||
# Comprobar conexión
|
||||
check_connection() {
|
||||
print_title "COMPROBAR CONEXIÓN"
|
||||
if ping -c 1 -W 2 8.8.8.8 > /dev/null 2>&1; then
|
||||
echo -e "\t${COLOR_GREEN}Conexión exitosa con 8.8.8.8${COLOR_RESET}"
|
||||
else
|
||||
echo -e "\t${COLOR_RED}Error de conexión con 8.8.8.8${COLOR_RESET}"
|
||||
|
||||
# Obtener la interfaz predeterminada
|
||||
default_interface=$(ip route show default | awk '/default/ {print $5}')
|
||||
|
||||
# Probar la conexión con el router
|
||||
router_ip=$(get_router_ip "$default_interface")
|
||||
if ping -c 1 -W 2 "$router_ip" > /dev/null 2>&1; then
|
||||
echo -e "\t${COLOR_GREEN}Conexión exitosa con el router ($router_ip)${COLOR_RESET}"
|
||||
else
|
||||
echo -e "\t${COLOR_RED}Error de conexión con el router ($router_ip)${COLOR_RESET}"
|
||||
exit 1ç
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Comprobar estado de sitios web
|
||||
check_websites() {
|
||||
# Lista de sitios web a comprobar
|
||||
websites=("vergaracarmona.es" "gitea.vergaracarmona.es" "diariosenderista.es" "marialuisasefardi.es" "prefapp.es")
|
||||
|
||||
# Verificar el estado de sitios web
|
||||
print_title "VERIFICANDO ESTADO DE WEBS"
|
||||
check_website_status() {
|
||||
local website=$1
|
||||
local timeout=5
|
||||
local http_code=$(curl -o /dev/null -L -s -w "%{http_code}" --max-time "$timeout" "$website")
|
||||
|
||||
if [ "$http_code" -eq 200 ]; then
|
||||
echo -e "\t${COLOR_GREEN}$website está levantado. ${COLOR_RESET}"
|
||||
else
|
||||
echo -e "\t${COLOR_RED}$website está caído (Código $http_code)${COLOR_RESET}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Iterar sobre la lista de sitios web
|
||||
for site in "${websites[@]}"; do
|
||||
check_website_status "$site"
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
# Obtener las interfaces de red
|
||||
get_interfaces() {
|
||||
print_title "TARJETAS DE RED"
|
||||
while read -r interface; do
|
||||
network_info+=("$(print_network_info "$interface")")
|
||||
done < <(ip -o link show | awk -F': ' '{print $2}')
|
||||
|
||||
print_network_table
|
||||
}
|
||||
|
||||
# Obtener IP pública
|
||||
get_public_ip_info() {
|
||||
print_title "INFO IP WAN"
|
||||
curl -s https://ipinfo.io | jq -r 'to_entries[] | "\u001b[34m\(.key):\u001b[0m \u001b[32m\(.value)\u001b[0m"'
|
||||
}
|
||||
|
||||
# Estado de nordvpn
|
||||
nordvpn_status() {
|
||||
print_title "ESTADO NORDVPN"
|
||||
nordvpn status | grep -v "New feature"
|
||||
}
|
||||
|
||||
# Nueva conexión nordvpn
|
||||
nordvpn_connect() {
|
||||
print_title "CONECTANDO NORDVPN"
|
||||
nordvpn connect Spain Barcelona
|
||||
}
|
||||
|
||||
# Test de velocidad
|
||||
speed_test() {
|
||||
print_title "TEST DE VELOCIDAD"
|
||||
speedtest
|
||||
}
|
||||
|
||||
# Realizar traceroute
|
||||
traceroute(){
|
||||
print_title "TRACEROUTE"
|
||||
mtr -c 3 -n -r 8.8.8.8
|
||||
}
|
||||
|
||||
# Menú principal
|
||||
main_menu() {
|
||||
while true; do
|
||||
print_title "Menú"
|
||||
echo "1 - Comprobar conexión"
|
||||
echo "2 - Verificar estado de webs"
|
||||
echo "3 - Ver tarjetas de red"
|
||||
echo "4 - Información de IP pública"
|
||||
echo "5 - Estado de NordVPN"
|
||||
echo "6 - Conectar Nordvpn"
|
||||
echo "7 - Test de velocidad"
|
||||
echo "8 - Traceroute"
|
||||
echo "9 - Salir"
|
||||
|
||||
read -p "Ingrese el número de la opción deseada: " choice
|
||||
case $choice in
|
||||
1) check_connection ;;
|
||||
2) check_websites ;;
|
||||
3) get_interfaces ;;
|
||||
4) get_public_ip_info ;;
|
||||
5) nordvpn_status ;;
|
||||
6) nordvpn_connect ;;
|
||||
7) speed_test ;;
|
||||
8) traceroute ;;
|
||||
9) echo -e "${COLOR_RED}\nSaliendo...\n${COLOR_RESET}"; tput cnorm; exit 0 ;;
|
||||
*) echo -e "${COLOR_RED}\nOpción inválida. Inténtelo de nuevo.${COLOR_RESET}" ;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
# Función principal
|
||||
main() {
|
||||
check_connection
|
||||
check_websites
|
||||
get_interfaces
|
||||
get_public_ip_info
|
||||
nordvpn_status
|
||||
main_menu
|
||||
}
|
||||
|
||||
main
|
13
01_bash/random_color.sh
Executable file
13
01_bash/random_color.sh
Executable file
@ -0,0 +1,13 @@
|
||||
#!/bin/bash
|
||||
|
||||
TXT='Voy a escribir un texto mucho más largo para que tenga mucho más que coger. The quick brown fox jumped over the lazy dog.'
|
||||
|
||||
WORDS=( $TXT )
|
||||
|
||||
for WORD in "${WORDS[@]}"; do
|
||||
let "i=$RANDOM % 256"
|
||||
echo -en "\e[38;5;${i}m$WORD \e[0m";
|
||||
done;
|
||||
|
||||
echo
|
||||
|
17
01_bash/repeat_random_color.sh
Executable file
17
01_bash/repeat_random_color.sh
Executable file
@ -0,0 +1,17 @@
|
||||
#!/bin/bash
|
||||
|
||||
TXT='Vendo opel corsa de color platino en muy buen estado'
|
||||
|
||||
WORDS=( $TXT )
|
||||
|
||||
for i in {0..50}; do
|
||||
clear
|
||||
for WORD in "${WORDS[@]}"; do
|
||||
let "i=$RANDOM % 256"
|
||||
echo -en "\e[38;5;${i}m$WORD \e[0m";
|
||||
done;
|
||||
sleep 1
|
||||
done
|
||||
|
||||
echo
|
||||
|
3
01_bash/repetir_random_color.sh
Executable file
3
01_bash/repetir_random_color.sh
Executable file
@ -0,0 +1,3 @@
|
||||
#!/bin/bash
|
||||
|
||||
for i in `seq 1 10`; do bash random_color.sh; done
|
49
01_bash/speed_web.sh
Executable file
49
01_bash/speed_web.sh
Executable file
@ -0,0 +1,49 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Este es un script de Bash para comprobar el código de estado de una lista de URLs
|
||||
# y utilizando el comando \time mide el tiempo de respuesta de cada solicitud.
|
||||
#
|
||||
# Uso:
|
||||
# chmod +x speed_web.sh
|
||||
# ./speed_web.sh http://ejemplo.com https://google.com http://otroejemplo.com
|
||||
#
|
||||
|
||||
COLOR_RED='\033[0;31m'
|
||||
COLOR_BLUE='\033[0;34m'
|
||||
COLOR_MAGENTA='\033[0;35m'
|
||||
COLOR_CYAN='\033[0;36m'
|
||||
COLOR_GRAY='\033[0;37m'
|
||||
COLOR_RESET='\033[0m'
|
||||
|
||||
# Control de salida con Ctrl + C
|
||||
function ctrl_c() {
|
||||
echo -e "${COLOR_RED}\n\n[!] Saliendo... \n${COLOR_RESET}"
|
||||
tput cnorm
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Ctrl+C
|
||||
trap ctrl_c SIGINT
|
||||
|
||||
check_url() {
|
||||
url="$1"
|
||||
echo -e "\n${COLOR_MAGENTA}[+] Comprobación URL:${COLOR_RESET}${COLOR_BLUE} $url${COLOR_RESET}"
|
||||
# Captura la salida de \time y curl por separado
|
||||
time_output=$({ /usr/bin/time -f "User mode: %U\nKernel mode: %S\nCPU: %P" curl -o /dev/null -L -s -w "\nCódigo de respuesta: %{http_code}\nTamaño del contenido: %{size_download} bytes\nTipo de contenido: %{content_type}\nDirección IP del servidor: %{remote_ip}\nTiempo de resolución DNS: %{time_namelookup} segundos\n" "$url"; } 2>&1)
|
||||
if [[ $? -eq 0 ]]; then
|
||||
echo -e "${COLOR_CYAN}$time_output${COLOR_RESET}"
|
||||
else
|
||||
echo -e "${COLOR_RED}\n\n[!] Error: No se pudo acceder a la URL${COLOR_RESET}"
|
||||
fi
|
||||
echo -e "${COLOR_CYAN}\n------------------------------------------${COLOR_RESET}"
|
||||
}
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
echo -e "${COLOR_RED}\n\n[!] Error: Introduce argumentos.${COLOR_RESET}"
|
||||
echo -e "${COLOR_BLUE}\n\tUso: $0 [URL1] [URL2] ...\n${COLOR_RESET}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for url in "$@"; do
|
||||
check_url "$url"
|
||||
done
|
Loading…
Reference in New Issue
Block a user