Skip to content

Instantly share code, notes, and snippets.

@Microjus
Created March 30, 2022 18:15
Show Gist options
  • Save Microjus/a1d76841ee538d388768b83e8476991e to your computer and use it in GitHub Desktop.
Save Microjus/a1d76841ee538d388768b83e8476991e to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
#------------------------------CABEÇALHO---------------------------------------|
#
# AUTOR: | Microjus <[email protected]>
# URL: | https://github/Microjus/Micro-ProgressBar_V4/
# DATA: | 2021-25-17
# PROGRAMA: | Micro-progressbar_v4
# VERSÃO: | final
# LICENÇA: | MIT
# DESCRIÇÃO: | Barra de prgresso para dar mais interatividade
# ao seu programa, usando array, loop for ete,
# explicado e com exemplos.
# O ARRAY DECLARADO ESTIPULA A QUANTIDADE TOTAL DE ETAPAS
# COM O PARAMETRO -R INDICANDO UMA VARIAVEL READ
declare -r etapas=('etapa1' 'etapa2' 'etapa3' 'etapa4')
# ASPAS SIMPLES PORQUE NENHUM CARACTERE ESPECIAL PRECISA SER INTERPRETADO
declare -r etapas_total=${#etapas[@]}
# DEFINE O TAMANHO MAXIMO DA ARRAY DE ETAPAS
declare -r barra="==============>"
# DEFINE COMO SERA E O TAMANHO DA BARRA QUANDO CONCLUIR O LOOP
declare -r barra_total=${#barra}
# Iniciando o loop com o for
# for i in "${!etapas[@]}"; do
# echo "[] $i %" # EXIBE a etapa decorrente
# done
for etapa in "${!etapas[@]}"; do # VINCULANDO ETAPA COM A VARIAVEL ETAPAS DECLARADA
percentual=$(((etapa + 1) * 100 / etapas_total)) # CALCULOS EM SHELL SAO FEITOS ENTRE ()
# DESSA FORMA SOMAMOS A ETAPA ATUAL COM 1 DE ACORDO COM A PROCENTAGEM 100
# E DIVIDIMOS POR ETAPAS TOTAL (4 ETAPAS)
percentualbarra=$((percentual * barra_total / 100))
sleep 1
# ASSIM A BARRA SERA EXIBIDA NA MESMA LINHA COM O PARAMETRO -N
# -E FAZ COM QUE O PONTEIRO VOLTE PARA O INICIO DA LINHA
echo -ne "\\r[${barra:0:percentualbarra}] $percentual %"
# 0 é o inicio e percentualbarra é o final
#echo "[${barra:0:percentualbarra}] $percentual %"
# SERA EXIBIDO A $BARRA E $PERCENTUAL DE ACORDO COM O LOOP
# DESSA FORMA A BARRA SERA EXIBIDA EM MULTPLAS LINHAS
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment