teste

🧩 Syntax:
#!/bin/bash

robos=("1008" "1012" "1041" "1042" "1043" "1044" "1045" "1048" "1052" "1056" "1057" "1058" "1060" "1061" "1062" "1063" "1067" "1068" "1069" "1070" "1071" "1091" "1097" "1098")
senhas=("U2FsdGVkX1+WhFyxfqx5au1S7OWA7oUNz9nMyhiFjpA=" "U2FsdGVkX1+PvtROFYan5JMuAlwUCG+r2r3NP9zUe84=" "U2FsdGVkX1/FwnuifOzKEO5wbLrVfBVERafacIjJBZc=" "U2FsdGVkX19CKVOdj7KQ/DY1+0w7T1zTyJHl8mSRyWA=" "U2FsdGVkX18yEKtKXsFWX0J+h5CdF+boXFOp1L25bhY=" "U2FsdGVkX1+E9k/fh4aK7DqVNxox00NrXbfIckWZqBk=" "U2FsdGVkX19qgpNfwETZrDKz/2gLk98U0hs6dMja+t8=" "U2FsdGVkX19kJQFEoKYrVyvRZ4T3u4M0SfVVy4G/JkA=" "U2FsdGVkX1+m6+nWAxP5MGKztMk1KwtzYMrPPNOWD9A=" "U2FsdGVkX1+B5uQ2MtduslphkWJpalZzAb9fueWzFCk=" "U2FsdGVkX1+RHL89JMyZrUIgUTkJ9G5m71/1RALY814=" "U2FsdGVkX19vRIwIW+oDJeHk3uUisjNkisaL0UjQKZo=" "U2FsdGVkX19GLM39Gp5xGYJpQOcVdOroNKHltSlDjfk=" "U2FsdGVkX1+rtrvkhpgRwz5GsuwM5rSaHtVW9iVNO8A=" "U2FsdGVkX1+UUVYszrP2QUzJrg3NPgRsMYRf857Msc8=" "U2FsdGVkX1/TjQQCStHDVERPnn8ZChpxPjJQ5FiZonI=" "U2FsdGVkX19twOTDsWKyRZNdomhB1TrmqwLO3HWstVg=" "U2FsdGVkX19LWjMxC1MNQjZMXTNwYNdnuuTEJYnl1qk=" "U2FsdGVkX1+rfXVOz7wVBtpHx5DTjnVh4S39vXzGvPk=" "U2FsdGVkX1+1fn6tnPoSsNnWui8Thpxba2wfF2i+ZZY=" "U2FsdGVkX1+2i3DyeRumk8kP/IrHcN0IGup3ubu1sK4=" "U2FsdGVkX19ycgua8+0jdI/uDwl2w3IM/zob6QHvJzM=" "U2FsdGVkX1+Gtu/WeRwprhoNuw+fWZ7xuCbRSt32tVs=" "U2FsdGVkX180FJbt78xCTpawdW7KemPFPGmKi9KgbGA=")
ciano=$(tput setaf 6)
red=$(tput setaf 1)
cinza=$(tput setaf 7)
green=$(tput setaf 2)
reset=$(tput sgr0)
path_imagens=""
opcao=-1
secret=""

exibir_menu() {
  echo "${green}Selecione um robô para baixar imagens: $reset"
  count=0

  for ((i=0; i<${#robos[@]}; i++)); do
    count=$((count + 1))
    printf "${cinza}%2d.${reset} %s\t" $((i+1)) "${robos[$i]}"

    if [ $((count % 4)) -eq 0 ]; then
      echo
    fi
  done

  printf "${cinza}%2d.${reset} Sair\n"
}
checar_data() {
    local data=$1

    if [ ${#data} -ne 6 ]; then
        return 1
    fi
  
    local dia=${data:0:2}
    local mes=${data:2:2}
    local ano=${data:4:2}

    if ! [[ $dia =~ ^[0-9]+$ ]] || ! [[ $mes =~ ^[0-9]+$ ]] || ! [[ $ano =~ ^[0-9]+$ ]]; then
        return 1
    fi

    if [ $dia -lt 1 ] || [ $dia -gt 31 ] || [ $mes -lt 1 ] || [ $mes -gt 12 ] || [ $ano -lt 1 ]; then
        return 1
    fi

    return 0
}
baixar_imagens_ssh() {
    local robo_index=$((opcao-1))
    local robo=${robos[$robo_index]}
    local senha=${senhas[$robo_index]}
    local total_esquerdo=0
    local total_direito=0
    local data_valida=false
    local right_port=51${robo:2:2}
    local left_port=52${robo:2:2}

    while [ "$data_valida" = false ]; do
        read -p "${green}Digite uma data (formato diamesano) ex: (310523): ${reset}" data
        if checar_data $data; then
            data_valida=true
        else
            echo -e "${red}[x] Data inválida. Tente novamente.${reset}"
        fi
    done
    echo -e "$ciano[#] Conectando ao robo: $robo$reset"
    
    sshpass -p "$(echo $senha | openssl enc -d -aes-256-cbc -a -salt -pass pass:"$secret" 2>/dev/null)" ssh -qp $left_port solarbot@20.206.85.15 exit
    connection_left=$(echo $?)  
    
    sshpass -p "$(echo $senha | openssl enc -d -aes-256-cbc -a -salt -pass pass:"$secret" 2>/dev/null)" ssh -qp $right_port solarbot@20.206.85.15 exit
    connection_right=$(echo $?)
    
    if [ ! "$connection_left" -eq 0 ]; then
        senha="U2FsdGVkX1+KdHJwHUSBM37RY3/2qxbRc5kKt2FzZrA="
    fi
    
    if [ ! "$connection_right" -eq 0 ]; then
        senha="U2FsdGVkX1+KdHJwHUSBM37RY3/2qxbRc5kKt2FzZrA="
    fi
    
    total_esquerdo="$(sshpass -p "$(echo $senha | openssl enc -d -aes-256-cbc -a -salt -pass pass:"$secret" 2>/dev/null)" ssh -p $left_port -o StrictHostKeyChecking=no solarbot@20.206.85.15 2> /dev/null "ls /home/solarbot/seeker_imgs/$data* 2>/dev/null | wc -l 2>/dev/null")"
    
    total_direito="$(sshpass -p "$(echo $senha | openssl enc -d -aes-256-cbc -a -salt -pass pass:"$secret" 2>/dev/null)" ssh -p $right_port -o StrictHostKeyChecking=no solarbot@20.206.85.15 2> /dev/null "ls /home/solarbot/seeker_imgs/$data* 2>/dev/null | wc -l 2>/dev/null")"
    
    local data_download=$(date +"%d%m%Y%H%M")
    local download_path=$path_imagens/$robo/$data_download/
    
    if [ -z "$total_esquerdo" ]; then
        echo -e "${red}[x] Não foi possivel conectar no boom esquerdo (Fora do ar/Senha incorreta).${reset}"
    else
        if [ ! "$total_esquerdo" -eq 0 ]; then
            echo -e "${cinza}[#] Boom esquerdo possui $total_esquerdo imagens.${reset}"
            sshpass -p "$(echo $senha | openssl enc -d -aes-256-cbc -a -salt -pass pass:"$secret" 2>/dev/null)" ssh -p $left_port -o StrictHostKeyChecking=no solarbot@20.206.85.15 2> /dev/null "cd /home/solarbot/seeker_imgs/ && zip -rq /tmp/$robo-$data_download-boomleft.zip $data* 2>/dev/null"
            echo -e "${cinza}[#] Baixando imagens boom esquerdo...${reset}"
            mkdir -p $download_path
            sshpass -p "$(echo $senha | openssl enc -d -aes-256-cbc -a -salt -pass pass:"$secret" 2>/dev/null)" scp -P $left_port -o StrictHostKeyChecking=no solarbot@20.206.85.15:/tmp/$robo-$data_download-boomleft.zip $download_path/boom-left-$data.zip
            sshpass -p "$(echo $senha | openssl enc -d -aes-256-cbc -a -salt -pass pass:"$secret" 2>/dev/null)" ssh -p $left_port -o StrictHostKeyChecking=no solarbot@20.206.85.15 2> /dev/null "rm /tmp/$robo-$data_download-boomleft.zip"
        fi
    fi
    
    if [ -z "$total_direito" ]; then
        echo -e "${red}[x] Não foi possivel conectar no boom direito (Fora do ar/Senha incorreta).${reset}"
    else
        if [ ! "$total_direito" -eq 0 ]; then
            echo -e "${cinza}[#] Boom direito possui $total_esquerdo imagens.${reset}"
            sshpass -p "$(echo $senha | openssl enc -d -aes-256-cbc -a -salt -pass pass:"$secret" 2>/dev/null)" ssh -p $right_port -o StrictHostKeyChecking=no solarbot@20.206.85.15 2> /dev/null "cd /home/solarbot/seeker_imgs/ && zip -rq /tmp/$robo-$data_download-boomright.zip $data* 2>/dev/null"
            echo -e "${cinza}[#] Baixando imagens boom direito...${reset}"
            mkdir -p $download_path
            sshpass -p "$(echo $senha | openssl enc -d -aes-256-cbc -a -salt -pass pass:"$secret" 2>/dev/null)" scp -P $right_port -o StrictHostKeyChecking=no solarbot@20.206.85.15:/tmp/$robo-$data_download-boomright.zip $download_path/boom-right-$data.zip
            sshpass -p "$(echo $senha | openssl enc -d -aes-256-cbc -a -salt -pass pass:"$secret" 2>/dev/null)" ssh -p $right_port -o StrictHostKeyChecking=no solarbot@20.206.85.15 2> /dev/null "rm /tmp/$robo-$data_download-boomright.zip"
        fi
    fi
    local total_images=$((total_esquerdo + total_direito))
    
    if [ "$total_images" -eq 0 ]; then
        echo -e "${ciano}[#] O robô $robo não possui nenhuma imagem para esta data...${reset}"
    fi
        
    echo -e "${ciano}[#] Foram baixadas total de $((total_esquerdo + total_direito)) imagens do robô $robo....${reset}"
}

mostrar_logo(){
echo -n ${cinza}
cat << 'EOF'
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡀⢀⣀⠀⠀⢀⣤⣶⣶⣶⣶⣦⣄⡀⠀⢀⣰⡶⠛⠿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠼⣻⠟⠙⣹⣦⣶⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣼⡯⣉⠑⠢⡈⢳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣾⠋⢁⠔⠋⣨⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡌⠓⡄⠈⠆⢇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⠃⡔⠁⢠⣾⣿⣿⣿⡿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣌⡉⠐⠲⠀⠘⢼⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢠⡾⢣⠎⠀⡠⠟⠉⣠⣵⡟⡇⠈⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⢢⠀⠀⠀⠘⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢠⠋⠀⠀⠀⠈⠀⣠⣾⣿⠏⠀⠀⠷⣦⣤⢜⡟⡏⢿⣿⣴⡯⢻⣿⣿⢀⣣⠀⠀⠀⠈⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⢠⠃⠀⠀⠀⠀⢠⣾⣿⣿⡏⠀⠰⠁⣶⣿⣶⡙⡏⢻⡰⡿⠿⠏⠂⣿⡿⠀⠙⡄⠀⠀⠀⠈⠳⡀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⡠⠋⠀⠀⠀⠀⠀⡞⢿⣿⣿⠁⠀⠀⠀⠀⢉⡡⢬⠀⠀⢱⣄⠀⠀⠀⣿⠇⠀⠀⠱⣄⠀⠀⠀⠀⠈⢦⠀⠀⠀⠀⠀⠀
⢀⣀⡤⠊⠀⠀⠀⠀⠀⣠⠞⠀⠘⡍⣩⡇⠀⠀⠀⠀⠀⢠⣞⣀⢀⣘⣦⠀⠀⢀⣿⠀⠀⠀⠀⠀⠑⡄⠀⠀⠀⠀⠑⢄⠀⠀⠀⠀
⠎⢻⠆⠀⠀⠀⠀⡰⠋⠀⠀⠀⠀⢱⡈⢀⠀⠀⠀⠀⠀⣠⠄⣈⣉⠀⠐⡄⠀⢸⠟⠀⠀⠀⠀⠀⠀⠈⡄⠀⠀⠀⣀⣀⢡⡀⠀⠀
⠀⢸⡀⠀⠀⠀⡴⠁⠀⠀⠀⠀⠀⠈⠿⣿⠀⠀⠀⠀⠀⠁⢾⡓⠒⣺⠂⠀⢀⠞⢦⠀⠀⠀⠀⠀⠀⠀⠸⡈⠉⠁⠀⠀⠀ ⠰
⠀⠀⠉⠁⠒⡞⠀⠀⠀⠀⢀⣀⣀⡠⢶⠋⢦⡀⠀⠀⠀⠀⠀⡀⠭⣀⠀⢀⢾⠀⠀⠑⣄⠔⠋⠒⠤⠤⠤⡇⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⡟⠒⠊⠉⠙⠣⠀⠀⠀⢸⠀⠀⠉⠢⣤⢀⣀⠀⠀⠀⢀⡰⠃⣸⡀⠀⢰⠃⠀⠀⠀⡄⠀⠀⠸⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠈⠣⡀⠀⠀⠘⡀⠀⠈⠉⣉⣁⡠⢼⠃⠑⠢⢇⡀⠀⠀⠀⢰⠀⠀⠀⠷⠀⠀⠀⠀⠀⠀⠀
 ⠀⠀⠀⠠⠁   ___⠀⠀⠀⠀⠀⠈⠑⠠⠤⣏⠉⠉⠉⠁⠀ ⡘⠀⠀⢀⠇⠀⠀ ⠀⢇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
        / __|_ __ _ _ __ _ _⠃__⠘___ _⠘_⠀⠀⠀⠀       
        \__ | '_ | '_/ _` | || / -_| '_|       
        |___| .__|_| \__,_|\_, \___|_|         
  ___       |_|        _   |__/      _         
 |   \ _____ __ ___ _ | |___ __ _ __| |___ _ _ 
 | |) / _ \ V  V | ' \| / _ / _` / _` / -_| '_|
 |___/\___/\_/\_/|_||_|_\___\__,_\__,_\___|_|                                         
EOF
echo -n ${reset}
}
input_secret(){
    clear
    mostrar_logo
    prompt="${green}Digite a Secret Key (Solicite ao R&d): ${reset}"
    while IFS= read -p "$prompt" -r -s -n 1 char; do
        if [[ $char == $'\0' ]]; then
          break
        fi
        if [[ $char == $'\177' ]]; then
          if [[ -n $secret ]]; then
            secret=${secret%?}
            prompt=$'\b \b'
          else
            prompt=""
          fi
        else
          secret+=$char
          prompt="${green}*${reset}"
        fi
    done
}
check_path(){
    clear
    mostrar_logo
    read -p "${green}Digite o path para salvar as imagens: ${reset}" path_imagens
    if [ ! -d "$path_imagens" ]; then
        echo $path_imagens
        mkdir -p "$path_imagens"
    fi
}

input_secret
check_path
while [ $opcao -ne 0 ]; do
  clear
  mostrar_logo
  exibir_menu
  read -p "${green}Digite a opção desejada: $reset" opcao
  case $opcao in
    0)
      echo "${green}[#] Saindo...${reset}"
      ;;
        [1-9]|[1-9][0-9]|[1-${#robos[@]}])
      baixar_imagens_ssh
      ;;
    "")
      echo "${red}[x] Nenhuma opção digitada. Tente novamente.${reset}"
      opcao=-1
      ;;
    *)
      echo "${red}[x] Opção inválida. Tente novamente.${reset}"
      ;;
  esac
  read -p "Pressione ENTER para continuar..."
  clear
done