Baixar e usar Bíblia Sagrada usando o terminal linux

Publicado por Iago Lira (última atualização em 13/07/2018)

[ Hits: 4.120 ]

Homepage: https://notabug.org/iagolira/

Download bibliadw.sh

Download 1531229845.bibliadw.sh (versão 2)




A BíbliaDW é ideal para fazer estudos bíblicos.

Se desejar contribuir com o projeto acesse a página: https://github.com/iagolirapasssos/biblia-bash

Lembrando que o script está em fase beta, tem muita coisa a ser implementada, então não se assuste se surgir bugs durante sua execução.

Você pode compartilhar o script e modificá-lo, desde que você cite o autor principal do projeto.

  



Versões atualizadas deste script

Versão 2 - Enviado por Iago Lira em 10/07/2018

Changelog: - Alguns comandos inseridos erroneamente foram removidos.
- Melhorias em geral.

Download 1531229845.bibliadw.sh


Esconder código-fonte

#!/bin/bash
#+-------------------------------------------------------+
#|Program: Bíblia DW                                     |
#|Version: 1.0.3                                         |
#|Autor: Francisco Iago Lira Passos                      |
#|GitHub: https://github.com/iagolirapasssos/biblia-bash |
#+-------------------------------------------------------+

export site="https://www.bibliaonline.com.br"
export dirat="antigo-testamento"
export dirnt="novo-testamento"


#Salta para uma coluna e linha
function jmp() {
    tput cup $1 $2
}
#----------------

#Versão bíblica
function versaob() {
    echo "
      +----------------------------------------+
      |     Escolha uma das versões            |
      |                                        |
      |  [1] Almeida Corrigida Fiel (ACF)      |
      |  [2] Nova Versão Internacional (NVI)   |
      |  [3] Sociedade Bíblica Britânica (SBB) |
      |  [4] Versão Católica (VC)              |
      +----------------------------------------+"
      read -p "      Digite o índice correspondente: " vsb
      unset abv
      case $vsb in
       1)
         abv="acf"
        ;;
        2)
         abv="nvi"
        ;;
        3)
         abv="tb"
        ;;
        4)
         abv="vc"
        ;;
        esac
}
#-------------------

#Antigo testamento
function vt() {
case "$1" in
    1)
    imax=50
    livro="Gênesis"
    abv="gn"
    ;;
    2)
    imax=40
    livro="Êxodo"
    abv="ex"
    ;;
    3)
    imax=27
    livro="Levíticos"
    abv="lv"
    ;;
    4)
    imax=36
    livro="Números"
    abv="nm"
    ;;
    5)
    imax=34
    livro="Deuteronômio"
    abv="dt"
    ;;
    6)
    imax=24
    livro="Josué"
    abv="js"
    ;;
    7)
    imax=21
    livro="Juízes"
    abv="jz"
    ;;
    8)
    imax=4
    livro="Rute"
    abv="rt"
    ;;
    9)
    imax=31
    livro="1Samuel"
    abv="1sm"
    ;;
    10)
    imax=24
    livro="2Samuel"
    abv="2sm"
    ;;
    11)
    imax=22
    livro="1Reis"
    abv="1rs"
    ;;
    12)
    imax=25
    livro="2Reis"
    abv="2rs"
    ;;
    13)
    imax=29
    livro="1Crônicas"
    abv="1cr"
    ;;
    14)
    imax=36
    livro="2Crônicas"
    abv="2cr"
    ;;
    15)
    imax=10
    livro="Esdras"
    abv="ed"
    ;;
    16)
    imax=13
    livro="Neemias"
    abv="ne"
    ;;
    17)
    imax=10
    livro="Ester"
    abv="et"
    ;;
    18)
    imax=42
    livro="Jó"
    abv="jó"
    ;;
    19)
    imax=150
    livro="Salmos"
    abv="sl"
    ;;
    20)
    imax=31
    livro="Provérbios"
    abv="pv"
    ;;
    21)
    imax=12
    livro="Eclesiastes"
    abv="ec"
    ;;
    22)
    imax=8
    livro="Cânticos"
    abv="ct"
    ;;
    23)
    imax=66
    livro="Isaías"
    abv="is"
    ;;
    24)
    imax=52
    livro="jeremias"
    abv="jr"
    ;;
    25)
    imax=5
    livro="Lamentações"
    abv="lm"
    ;;
    26)
    imax=48
    livro="Ezequiel"
    abv="ez"
    ;;
    27)
    imax=12
    livro="Daniel"
    abv="dn"
    ;;
    28)
    imax=14
    livro="Oséias"
    abv="os"
    ;;
    29)
    imax=3
    livro="Joel"
    abv="jl"
    ;;
    30)
    imax=9
    livro="Amós"
    abv="am"
    ;;
    31)
    imax=1
    livro="Obadias"
    abv="ob"
    ;;
    32)
    imax=4
    livro="Jonas"
    abv="jn"
    ;;
    33)
    imax=7
    livro="Miqueias"
    abv="mq"
    ;;
    34)
    imax=3
    livro="Naum"
    abv="na"
    ;;
    35)
    imax=3
    livro="Habacuque"
    abv="hc"
    ;;
    36)
    imax=3
    livro="Sofonias"
    abv="sf"
    ;;
    37)
    imax=2
    livro="Ageu"
    abv="ag"
    ;;
    38)
    imax=14
    livro="Zacarias"
    abv="zc"
    ;;
    39)
    imax=4
    livro="Malaquias"
    abv="ml"
    ;;
    *)
    echo "Entre com outro número!"
    ;;
esac
 case $3 in
    1)
        bb="acf"
    ;;
    2)
        bb="nvi"
    ;;
    3)
        bb="tb"
    ;;
    4)
        bb="vc"
    ;;
    *)
        vtm
    ;;
    esac
    
if [ "$2" = "1" ]; then
    vtb="at"
    builddir "$imax" "$abv" "$vtb" "$livro" "$bb"
elif [ "$2" = "2" ]; then
    vtb="at"
    menuler "$abv" "$vtb" "$livro" "$bb"
fi
}
#---------------

#Novo testamento
function nt() {
case "$1" in
    1)
    imax=28
    livro="Mateus"
    abv="mt"
    ;;
    2)
    imax=16
    livro="Marcos"
    abv="mc"
    ;;
    3)
    imax=24
    livro="Lucas"
    abv="lc"
    ;;
    4)
    imax=21
    livro="João"
    abv="jo"
    ;;
    5)
    imax=28
    livro="Atos"
    abv="atos"
    ;;
    6)
    imax=16
    livro="Romanos"
    abv="rm"
    ;;
    7)
    imax=16
    livro="1Coríntios"
    abv="1co"
    ;;
    8)
    imax=13
    livro="2Coríntios"
    abv="2co"
    ;;
    9)
    imax=6
    livro="Gálatas"
    abv="gl"
    ;;
    10)
    imax=6
    livro="Efésios"
    abv="ef"
    ;;
    11)
    imax=4
    livro="Filipenses"
    abv="fp"
    ;;
    12)
    imax=4
    livro="Colossenses"
    abv="cl"
    ;;
    13)
    imax=5
    livro="1Tessalonicenses"
    abv="1ts"
    ;;
    14)
    imax=3
    livro="2Tessalonicenses"
    abv="2ts"
    ;;
    15)
    imax=6
    livro="1Timóteo"
    abv="1tm"
    ;;
    16)
    imax=4
    livro="2Timóteo"
    abv="2tm"
    ;;
    17)
    imax=3
    livro="Tito"
    abv="tt"
    ;;
    18)
    imax=1
    livro="Filemom"
    abv="fm"
    ;;
    19)
    imax=13
    livro="Hebreus"
    abv="hb"
    ;;
    20)
    imax=5
    livro="Tiago"
    abv="tg"
    ;;
    21)
    imax=5
    livro="1Pedro"
    abv="1pe"
    ;;
    22)
    imax=3
    livro="2Pedro"
    abv="2pe"
    ;;
    23)
    imax=5
    livro="1João"
    abv="1jo"
    ;;
    24)
    imax=1
    livro="2João"
    abv="2jo"
    ;;
    25)
    imax=1
    livro="3João"
    abv="3jo"
    ;;
    26)
    imax=1
    livro="Judas"
    abv="jd"
    ;;
    27)
    imax=22
    livro="Apocalipse"
    abv="ap"
    ;;
    *)
    echo "Entre com outro número!"
    ;;
esac
    case $3 in
    1)
        bb="acf"
    ;;
    2)
        bb="nvi"
    ;;
    3)
        bb="tb"
    ;;
    4)
        bb="vc"
    ;;
    *)
        ntm
    ;;
    esac
    
if [ "$2" = "1" ]; then
    ntb="nt"
    builddir $imax "$abv" "$ntb" "$livro" "$bb"
elif [ "$2" = "2" ]; then
    ntb="nt"
    menuler "$abv" "$ntb" "$livro" "$bb"
fi
}
#---------------

#antigo testamento
    function atm() {
      clear
      echo "
      +-------------------------------------------------------+
      |           A N T I G O  T E S T A M E N T O            | 
      +-------------------------------------------------------+
      | [01] Gn    [02] Ex   [03] Lv    [04] Nm    [05] Dt    |
      | [06] Js    [07] Jz   [08] Rt    [09] 1Sm   [10] 2Sm   |
      | [11] 1Rs   [12] 2Rs  [13] 1Cr   [14] 2Cr   [15] ed    |
      | [16] Ne    [17] Et   [18] Jó    [19] Sl    [20] Pv    |
      | [21] Ec    [22] Ct   [23] Is    [24] Jr    [25] Lm    |
      | [26] Ez    [27] Dn   [28] Os    [29] Jl    [30] Am    |
      | [31]-Ob    [32] Jn   [33] Mq    [34] Na    [35] Hc    |
      | [36] Sf    [37] Ag   [38] Zc    [39] Ml               |
      +-------------------------------------------------------+"
      read -p "      Deseja baixar(1) ou ler(2) os livros? " bl
      echo
      
       if [ $bl = 1 ]; then
      read -p "      Você irá baixar um (1) ou vários livros (2)? " bv
    
        case $bv in
        1)
            versaob
            read -p "      Escolha o livro pelo índice (ex.: 23): " a
            vt $a $bl "$vsb"
            menu
        ;;
        2)
            versaob
            read -p "      Digite o intervalo a ser baixado (ex.1 39): " a b
            for (( j=$a; j<=$b; j++ ))
            do
                vt $j $bl "$vsb"
            done
            menu
        ;;
        *) 
            echo "      Opção inválida! Digite '0' ou '1'."
        ;;
        esac
      elif [ $bl = 2 ]; then
        versaob
        read -p "      Escolha o livro pelo índice (ex.: 23): " a
        vt $a $bl "$vsb"
      else
        atm
      fi
}
#-----------------

#novo testamento
    function ntm() {
      clear
      echo "
      +-------------------------------------------------------+
      |            N O V O  T E S T A M E N T O               | 
      +-------------------------------------------------------+
      | [01] Mt    [02] Mc    [03] Lc   [04] Jo    [05] At    |
      | [06] Rm    [07] 1Co   [08] 2Co  [09] Gl    [10] Ef    |
      | [11] Fp    [12] Cl    [13] 1Ts  [14] 2Ts   [15] 1Tm   |
      | [16] 2Tm   [17] Tt    [18] Fm   [19] Hb    [20] Tg    |
      | [21] 1Pe   [22] 2Pe   [23] 1Jo  [24] 2Jo   [25] 3Jo   |
      | [26] Jd    [27] Ap                                    |
      +-------------------------------------------------------+"
      read -p "      Deseja baixar(1) ou ler(2) os livros? " bl
      
       if [ "$bl" = "1" ]; then
      read -p "      Você irá baixar um (1) ou vários livros (2)? " bv
    
        case $bv in
        1)
            versaob
            read -p "      Escolha o livro pelo índice (ex.: 23): " a
            nt $a $bl $vsb
            menu
        ;;
        2)
            versaob
            read -p "      Digite o intervalo a ser baixado (ex.1 27): " a b
            for (( j=$a; j<=$b; j++ ))
            do
                  nt $j $bl "$vsb"
            done
            menu
        ;;
        *) 
            echo "      Opção inválida! Digite '0' ou '1'."
        ;;
        esac
      elif [ $bl = 2 ]; then
      versaob
      read -p "      Escolha o livro pelo índice (ex.: 23): " a
        nt $a $bl $vsb
      else
        ntm
      fi
    }
#-----------------


#Limpa linha
function clearline() {
    jmp "$1" "$2"
    ind=$(("$3"))
    for (( i=1; i<"$ind"; i++ )); do printf '%.s '; done
}
#-----------------

#barra progresso
function progresso() {
clear
    ini=2
    imax=51
    
    per=$(echo "scale=0; ($1*50)/$2" | bc)
    per2=$((2 * $per))
    
    jmp "$ini" 0
    echo "["
    jmp "$ini" "$(($imax))"
    echo "][  "$per2"%  ]"
    
    echo "Baixando o livro de $3..."
  
    clearline "$ini" 1 "$per" 
    jmp "$ini" 1
    for (( i=0; i<$per; i++ )); do printf '%.s='; done
    echo
}
#-----------------

#construir diretorio
function builddir() {
        [[ -d "$5" ]] || mkdir "$5"
        [[ -d "$5"/at ]] || mkdir "$5"/at

        [[ -d "$5" ]] || mkdir "$5"
        [[ -d "$5"/nt ]] || mkdir "$5"/nt
        
        buildbook $1 "$2" "$3" "$5" "$4"
}
#-----------------

#Detectar a tecla up, dw e zero
function key() {
   keyup='\[A'
   keydown='\[B'
   keyzero='0'

   SUCCESSO=0

   read -n3 key                    # Ler 3 caracteres

   echo -n "$key" | grep "$keyup"  #verifica se o codigo do caract. foi detectado
   if [ "$?" -eq "$SUCCESSO" ]
   then
      keyud=1
   fi

   echo -n "$key" | grep "$keydown"
   if [ "$?" -eq "$SUCCESSO" ]
   then
      keyud=2
   fi
   
   echo -n "$key" | grep "$keyzero"
   if [ "$?" -eq "$SUCCESSO" ]
   then
      keyud=0
   fi
}
#-----------------


#construir livro
function buildbook() {
livro="$4"/"$3"/"$2"
[[ -f "$livro" ]] && rm -f "$livro"
    for (( k=1; k<=$1; k++ ))
    do
       progresso $k $1 "$5"
       wget -qO file "$site"/"$4"/"$2"/"$k"

       grep -oP '(?<=osisID=\\\").*(</verse>)' file |\
       sed 's/\<verse osisID=\\\"/\n/g; s/[/\><]//g; s/"/ /g; s/&quot;\|verse//g; s/—/-/g' |\
       sed '1d; s/\./@ /; s/.*@//g; s/.//' |\
       sed -e "s/^/$2 /g; s/^[a-zA-Z]/\U&/g" >> "$livro"
    done
    [[ -f file ]] && rm -f file
}
#-----------------

#Gerenciar livro
function lerlivro() {
book="$4"/"$2"/"$1" #Diretorio do livro
linebook=$(wc -l "$book" | sed 's/[^0-9]//g') #numero de linhas do livro

unset i
i=1
read -p "    Quantas linhas você deseja ler por vez? " lpv
while :
do   clear
   echo "
         +------------------------------+
         |Tecle a seta para cima ou     |
         |a tecla para baixo para       |
         |avançar ou voltar uma linha   |
         +------------------------------|
         |                              |
         | [0]  Ir ao menu              |
         |                              |
         +------------------------------+
         Linha "$i" de "$linebook""
    
    if [ `which fmt` ]; then
        grep -oP '(?<=[a-zA-Z] ).*(?=$)' "$book" | head -"$i" |\
        tail -n "$lpv" | sed 's/¶//; s/$/\n/' | fmt -w 90
   elif [ `which fold` ]; then
        grep -oP '(?<=[a-zA-Z] ).*(?=$)' "$book" | head -"$i" |\
        tail -n "$lpv" | sed 's/¶//; s/$/\n/' | fold -s -w90
    else
        grep -oP '(?<=[a-zA-Z] ).*(?=$)' "$book" | head -"$i" |\
        tail -n "$lpv" | sed 's/¶//; s/$/\n/' | fold -s -w90
    fi
   
   key #chama a funcao key
   
   if [ "$keyud" = 2 ]; then
      let i="$i"+1
   elif [ "$keyud" = 1 ] && [ "$i" > 1 ]; then
       let i=$i-1
   elif [ "$keyud" = 1 ] && [ "$i" = 1 ]; then
       i=1
    elif [ "$keyud" = 0 ]; then
         menuler "$1" "$2" "$3" "$4"
   fi
        #Nao pode passar do maximo
      [[ "$i" -gt "$linebook" ]] && i="$linebook"
      #Nao pode ser menor que o minimo
      [[ "$i" -lt 1 ]] && i=1
done
}
#-----------------

#Gera dados
function gerardados() {
arquivo1="$4/$3-dados-pesquisa-$1.txt"
    case "$3" in
       "acf")
         versao="Almeida Corrigida e Revista"
        ;;
        "nvi")
         versao="Nova Versão Internacional"
        ;;
        "tb")
         versao="Sociedade Bíblica Britânica"
        ;;
        "vc")
         versao="Versão Católica"
        ;;
        esac
        echo "
        ====== DADOS DA PESQUISA ======

        Palavras-chave:   $1
        Ocorrências:      $2
        Versão bíblica:   $versao
        Data da pesquisa: `date`

        =====================
        " > "$arquivo1"

}
#-----------------

#Buscar palavra(s)
function encontrar() {
    unset book
    dirpesq="pesquisa"
    
    #versão/at-nt/livro
    [[ "$5" != "1" ]] && book="$3/$4"  #Diretorio do livro
    [[ "$5" = "1" ]] && book="$3"/"$4"/"$6"      #Somente um livro
    
    words=($1)
    n1=0    #fixo
    n2=$2   #fixo
    flag1=0 #flag
    cont1=0 #contador
    cont2=0 #contador
    i=0     #contador
    
    while :
    do
        for (( j=$n1; j<=$n2; j++ ))
        do
            [[ "$j" = "$n2" ]] && { unset flag1; flag1=$i; }
            [[ "$i" > "$n2" ]] && { unset i; i=0; }
            keys[$j]=$(echo ${words[$i]}"*.*")
            let i=$i+1
        done
        
        if [ `echo ${keys[@]} | wc -w` > 1 ]; then
            search="$(echo ${keys[@]} | sed 's/ //g; s/\*\.\**.$//g')"
            unformated="$(echo "$search" | sed 's/\*\.\*/; /')"
        else
            search="$(echo ${keys[@]} | sed 's/ //g')"
            unformated="$search"
        fi
      
      if [ `which fmt` ]; then 
            [ -d pesquisa ] || mkdir pesquisa
            grep --color=always -wrE "$search" "$book" | sed 's/¶//; s/$/\n/' |\
            fmt -w 100 > pesquisa/"$unformated".txt
            ocorrencias=$(bc -l <<< "`grep -wcrE "$search" "$book" |\
            sed 's/.*://' | tr '\n' '+' | sed 's/+*.$//g'`")
            let cont2=$cont2+$ocorrencias
        else
            [ -d pesquisa ] || mkdir pesquisa
            #Irá pesquisa por 'search'
            grep --color=always -wrE "$search" "$book" |\
            sed 's/¶//; s/$/\n/' > pesquisa/"$unformated".txt
            #Numero de ocorrencias
            ocorrencias=$(bc -l <<< "`grep -wcrE "$search" "$book" |\
            sed 's/.*://' | tr '\n' '+' | sed 's/+*.$//g'`")
            #Quantidade total de ocorrencias
            let cont2=$cont2+$ocorrencias
        fi
        echo $cont2

        gerardados "$unformated" $cont2 "$3" "$dirpesq"
        
        i=$flag1
        [[ $cont1 -le $n2 ]] && break
        let cont1=$cont1+1
    done
    clear
    #Mostra a resposta da pesquisa
    cat pesquisa/"$unformated".txt
    #Mostra os dados da pesquisa
    cat "$arquivo1"
}

function buscar() {
    clear
    echo "
    +----------------------------------------------------------------+
    | A busca é 'case sensitive', ou seja, Deus é diferente de deus. |
    +----------------------------------------------------------------+ 
    | A seguinte entradas é válida: Deus terra Canaã                 |
    | As três palavras serão permutadas e a busca será eficiente     |
    |                                                                |
    +----------------------------------------------------------------+
    "
    read -p "    Digite a(s) palavra(s) a ser(em) buscada(s): " keywords

    palavras=($keywords)          #Vetor palavras
    numpalavras=${#palavras[*]}  #Número de palavras
    contador=$(($numpalavras-1)) #Fim do loop
    
    if [[ "$4" = "1" ]]; then
        read -p "    Você deseja procurar no AT(1) ou NT(2) testamento? " resposta1
        
        case "$resposta1" in
        1)
          unset resposta1
          resposta1="at"
          #versao livro abreviação flag
          encontrar "$keywords" $contador "$1" "$resposta1" 0 "$3"
        ;;
        2) 
          unset resposta1
          resposta1="nt"
          #versao livro abreviação flag
          encontrar "$keywords" $contador "$1" "$resposta1" 0 "$3"
        ;;
        *)
          buscar "$1" "$2" "$3" "$4"
        ;;
        esac
        
    else
        resposta1="$2"
        #versao livro abreviação flag
        encontrar "$keywords" $contador "$1" "$resposta1" 1 "$3"
    fi

}
#-----------------

#Menu de leitura
function menuler(){
     clear
    echo "
            Livro de "$3"
    +------------------------------+
    |       MENU DE LEITURA        |
    |                              |
    | [1] Ler livro                |
    | [2] Pesquisar palavra(s)     |
    | [0] Voltar ao menu principal |
    |                              |
    +------------------------------+"
     
    read -p "    Digite a opção desejada: " opc
    echo
     
     case "$opc" in
     1)
        #abreviação livro livro-extenso versão
        lerlivro "$1" "$2" "$3" "$4"
     ;;
     2)
        #versao livro abreviação flag
        buscar "$4" "$2" "$1" 0
     ;;
     0)
        menu
     ;;
     *)
        echo "Digite um índice válido!"
        sleep 0.5
        #abreviação livro livro-extenso versão
        menuler "$1" "$2" "$3" "$4"
     ;;
     esac
}
#-----------------

#Menu
function menu() {
    clear
   echo "
   +--------------------------------+
   | NVI- Nova Versão Internacional |
   |--------------------------------|
   |                                |
   | [1] Velho testamento (VT)      |
   | [2] Novo testamento (NT)       |
   | [3] Buscar palavra(s)          |      
   | [0] Sair (Ctrl+C)              |
   |                                |
   +--------------------------------+"
   read -p "   Escolha o índice correspondente: " lv
   
   case "$lv" in
    1) atm
    ;;
    2) ntm
    ;;
    3)
        clear
       versaob
       #versao livro abreviação flag
        buscar "$abv" 0 0 1
    ;;
    0) exit; echo
    ;;
    *) menu
    ;;
   esac
}
#-----------------

#chama menu
    menu
#chama menu

Scripts recomendados

Script para atualização de hora

Zclamav - script para substituir o Clamtk

Pequeno gerador de relatório da rede (CSV)

Troca de MAC

Gerador de slack-desc


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts