Escrever números, datas, horas e outros por extenso

Publicado por Elias Bernabé Turchiello (última atualização em 21/05/2012)

[ Hits: 19.909 ]

Homepage: www.turchiellows.xpg.com.br

Download numeros-por-extenso-texto.sh




Este script escreve por extenso valores numéricos, monetários (moeda brasileira), datas, (levando em consideração anos bissextos), horas, meses do ano e os dias da semana.

Funciona em modo texto devolvendo o resultado na tela do terminal, o qual pode muito bem ser redirecionado com > ou >>

Ex.:
   PARA VALORES NUMÉRICOS: (decimais com vírgula)
   ./numeros-por-extenso-texto.sh -n 123,42
   cento e vinte e três vírgula quarenta e dois
   
   PARA VALORES MONETÁRIOS (em reais): (decimais com vírgula)
   ./numeros-por-extenso-texto.sh -V 99,12
   noventa e nove reais com doze centavos
   
   PARA VALORES DE DATAS:
   ./numeros-por-extenso-texto.sh -D 01/04/1978
   primeiro de abril do ano um mil e novecentos e setenta e oito
   
   PARA VALORES DE HORAS:
   ./numeros-por-extenso-texto.sh -H 00:15:09
   zero hora com quinze minutos e nove segundos
   
   PARA OS MESES DO ANO: (1-12)
   ./numeros-por-extenso-texto.sh -m 9
   setembro
   
   PARA OS DIAS DA SEMANA: (1-7)
   ./numeros-por-extenso-texto.sh -s 4
   quarta-feira

  



Esconder código-fonte

#!/bin/bash
# numeros-por-extenso-texto.sh

#-------------------------------------------------------------------------------------
# Versão 1.0 : Elias Bernabé Turchiello - 29/04/2012 : Escreve por extenso um número passado como parâmetro, dando o seu resultado em valor monetário (reais e centavos). Não faz verificação nenhuma e não solicita correção do valor digitado. Desenvolvido para ser chamado silenciosamente por outros scripts e simplesmente devolver a resposta
# Versão 1.1 : Elias Bernabé Turchiello - 12/05/2012 : Passa a escrever valores numéricos, datas, horas, meses e dias da semana
# Versão 1.2 : Elias Bernabé Turchiello - 14/05/2012 : Separado a parte de ajuda em um case a parte que trata somente o primeiro parâmetro. Se nenhum parâmetro for passado simplesmente não faz nada.


#-------------------------------------------------------------------------------------
# Elias Bernabé Turchiello
# Home: www.turchiellows.xpg.com.br

#-------------------------------------------------------------------------------------
# Criando a variável de ajuda sobre a descrição do script:
Ajuda="
 [`basename $0`]
 * USO : `basename $0` [OPÇÃO] [PARÂMETRO]

 * Escreve por extenso valores numéricos, monetários, datas, horas, mêses e os
   dias da semana
 * Desenvolvido em Kurumin NG e otimizado para sistemas Debian e derivados
 * Funciona em modo texto para ser executado diretamente no terminal ou
   chamado a partir de outro script qualquer
 * Aceita números com até duas casas decimais separadas obrigatoriamente por vírgula
 * A separação das unidade de milhar pode ou não ser feita por um ponto Ex.: 110.000
"
# Criando a variável de ajuda sobre as opções do script:
Opcoes="
 [OPÇÕES]
 -h    --help         -mostra esta tela de ajuda e sai
 -v    --versao       -mostra a versão, data de criação, o autor, as mudanças da versão e sai
 -e    --exemplo      -mostra exemplos de como executar este script e sai
 -d    --depende      -mostra a lista de dependências do script e sai
 -n    --numero       -escreve por extenso números cardinais
 -V    --valor        -escreve por extenso valores de moedas em Reais (moeda brasileira)
 -D    --data         -escreve por extenso valores de tadas no formato dd/mm/yyyy
 -H    --hora         -escreve por extenso valores de horas no formato hh:mm:ss
 -s    --semana       -escreve por extenso o dia da semana numerado de 1-7 (1=domingo)
 -m    --mes          -escreve por extenso o mês do ano numerado de 1-12 (1=janeiro)
"
# Criando a variável de ajuda com exemplos de execução do script:
Exemplos="
   PARA VALORES NUMÉRICOS: (decimais com vírgula)
   ./`basename $0` -n 123,42 
   cento e vinte e três vírgula quarenta e dois
   
   PARA VALORES MONETÁRIOS (em reais): (decimais com vírgula)
   ./`basename $0` -V 99,12
   noventa e nove reais com dize centavos
   
   PARA VALORES DE DATAS:
   ./`basename $0` -D 01/04/1978
   primeiro de abril do ano um mil e novecentos e setenta e oito
   
   PARA VALORES DE HORAS:
   ./`basename $0` -H 00:15:09
   zero hora com quinze minutos e nove segundos
   
   PARA OS MESES DO ANO: (1-12)
   ./`basename $0` -m 9
   setembro
   
   PARA OS DIAS DA SEMANA: (1-7)
   ./`basename $0` -s 4
   quarta-feira
"

#-------------------------------------------------------------------------------------
# Preparando a variável IFS para ler nomes com espaços:
Ifsvelho="$IFS"
IFS='
'

#-------------------------------------------------------------------------------------
# Preparando as funções para a leitura de unidade, dezena e centena:
# Função para ler somente unidades até 9:
Unidade () {
# Coletando o número da unidade:
Unidade=`cat /tmp/valor-$$ | cut -c$1`
# Processando:
case $Unidade in
   1) echo -n "um" >> /tmp/resultado-$$ ;;
   2) echo -n "dois" >> /tmp/resultado-$$ ;;
   3) echo -n "três" >> /tmp/resultado-$$ ;;
   4) echo -n "quatro" >> /tmp/resultado-$$ ;;
   5) echo -n "cinco" >> /tmp/resultado-$$ ;;
   6) echo -n "seis" >> /tmp/resultado-$$ ;;
   7) echo -n "sete" >> /tmp/resultado-$$ ;;
   8) echo -n "oito" >> /tmp/resultado-$$ ;;
   9) echo -n "nove" >> /tmp/resultado-$$ ;;
esac
}

# Função para ler as unidades de datas. O dia 1 deve ser identificado como primerio:
UnidadeData () {
# Coletando o número da unidade:
Unidade=`cat /tmp/valor-$$ | cut -c$1`
# Processando:
case $Unidade in
   1) echo -n "primeiro" >> /tmp/resultado-$$ ;;
   2) echo -n "dois" >> /tmp/resultado-$$ ;;
   3) echo -n "três" >> /tmp/resultado-$$ ;;
   4) echo -n "quatro" >> /tmp/resultado-$$ ;;
   5) echo -n "cinco" >> /tmp/resultado-$$ ;;
   6) echo -n "seis" >> /tmp/resultado-$$ ;;
   7) echo -n "sete" >> /tmp/resultado-$$ ;;
   8) echo -n "oito" >> /tmp/resultado-$$ ;;
   9) echo -n "nove" >> /tmp/resultado-$$ ;;
esac
}

# Função para ler as unidades de horas. Deve ler o valor zero para a zero hora:
UnidadeHora () {
# Coletando o número da unidade:
Unidade=`cat /tmp/valor-$$ | cut -c$1`
# Processando:
case $Unidade in
   0) echo -n "zero" >> /tmp/resultado-$$ ;;
   1) echo -n "uma" >> /tmp/resultado-$$ ;;
   2) echo -n "duas" >> /tmp/resultado-$$ ;;
   3) echo -n "três" >> /tmp/resultado-$$ ;;
   4) echo -n "quatro" >> /tmp/resultado-$$ ;;
   5) echo -n "cinco" >> /tmp/resultado-$$ ;;
   6) echo -n "seis" >> /tmp/resultado-$$ ;;
   7) echo -n "sete" >> /tmp/resultado-$$ ;;
   8) echo -n "oito" >> /tmp/resultado-$$ ;;
   9) echo -n "nove" >> /tmp/resultado-$$ ;;
esac
}

# Função para ler dezena até 99:
Dezena () {
# Coletando o número da dezena:
Dezena=`cat /tmp/valor-$$ | cut -c$1`
# Coletando o número da unidade:
Unidade=`cat /tmp/valor-$$ | cut -c$2`
case $Dezena in
   0) case $Dezena$Unidade in
      0) echo -n "0" > /dev/null ;;
      0*) Unidade $2 >> /tmp/resultado-$$ ;;
   esac ;;
   1) case $Dezena$Unidade in
      10) echo -n "déz" >> /tmp/resultado-$$ ;;
      11) echo -n "onze" >> /tmp/resultado-$$ ;;
      12) echo -n "doze" >> /tmp/resultado-$$ ;;
      13) echo -n "treze" >> /tmp/resultado-$$ ;;
      14) echo -n "catorze" >> /tmp/resultado-$$ ;;
      15) echo -n "quinze" >> /tmp/resultado-$$ ;;
      16) echo -n "dezeseis" >> /tmp/resultado-$$ ;;
      17) echo -n "dezesete" >> /tmp/resultado-$$ ;;
      18) echo -n "dezoito" >> /tmp/resultado-$$ ;;
      19) echo -n "dezenove" >> /tmp/resultado-$$ ;;
   esac ;;
   2) case $Dezena$Unidade in
      20) echo -n "vinte" >> /tmp/resultado-$$ ;;
      2*) echo -n "vinte e " >> /tmp/resultado-$$ ; Unidade $2 >> /tmp/resultado-$$ ;;
   esac ;;
   3) case $Dezena$Unidade in
      30) echo -n "trinta" >> /tmp/resultado-$$ ;;
      3*) echo -n "trinta e " >> /tmp/resultado-$$ ; Unidade $2 >> /tmp/resultado-$$ ;;
   esac ;;
   4) case $Dezena$Unidade in
      40) echo -n "quarenta" >> /tmp/resultado-$$ ;;
      4*) echo -n "quarenta e " >> /tmp/resultado-$$ ; Unidade $2 >> /tmp/resultado-$$ ;;
   esac ;;
   5) case $Dezena$Unidade in
      50) echo -n "cinquenta" >> /tmp/resultado-$$ ;;
      5*) echo -n "cinquenta e " >> /tmp/resultado-$$ ; Unidade $2 >> /tmp/resultado-$$ ;;
   esac ;;
   6) case $Dezena$Unidade in
      60) echo -n "sessenta" >> /tmp/resultado-$$ ;;
      6*) echo -n "sessenta e " >> /tmp/resultado-$$ ; Unidade $2 >> /tmp/resultado-$$ ;;
   esac ;;
   7) case $Dezena$Unidade in
      70) echo -n "setenta" >> /tmp/resultado-$$ ;;
      7*) echo -n "setenta e " >> /tmp/resultado-$$ ; Unidade $2 >> /tmp/resultado-$$ ;;
   esac ;;
   8) case $Dezena$Unidade in
      80) echo -n "oitenta" >> /tmp/resultado-$$ ;;
      8*) echo -n "oitenta e " >> /tmp/resultado-$$ ; Unidade $2 >> /tmp/resultado-$$ ;;
   esac ;;
   9) case $Dezena$Unidade in
      90) echo -n "noventa" >> /tmp/resultado-$$ ;;
      9*) echo -n "noventa e " >> /tmp/resultado-$$ ; Unidade $2 >> /tmp/resultado-$$ ;;
   esac ;;
esac 
}

# Função para ler as dezenas de datas:
DezenaData () {
# Coletando o número da dezena:
Dezena=`cat /tmp/valor-$$ | cut -c$1`
# Coletando o número da unidade:
Unidade=`cat /tmp/valor-$$ | cut -c$2`
case $Dezena in
   0) case $Dezena$Unidade in
      0) echo -n "0" > /dev/null ;;
      0*) UnidadeData $2 >> /tmp/resultado-$$ ;;
   esac ;;
   1) case $Dezena$Unidade in
      10) echo -n "déz" >> /tmp/resultado-$$ ;;
      11) echo -n "onze" >> /tmp/resultado-$$ ;;
      12) echo -n "doze" >> /tmp/resultado-$$ ;;
      13) echo -n "treze" >> /tmp/resultado-$$ ;;
      14) echo -n "catorze" >> /tmp/resultado-$$ ;;
      15) echo -n "quinze" >> /tmp/resultado-$$ ;;
      16) echo -n "dezeseis" >> /tmp/resultado-$$ ;;
      17) echo -n "dezesete" >> /tmp/resultado-$$ ;;
      18) echo -n "dezoito" >> /tmp/resultado-$$ ;;
      19) echo -n "dezenove" >> /tmp/resultado-$$ ;;
   esac ;;
   2) case $Dezena$Unidade in
      20) echo -n "vinte" >> /tmp/resultado-$$ ;;
      2*) echo -n "vinte e " >> /tmp/resultado-$$ ; Unidade $2 >> /tmp/resultado-$$ ;;
   esac ;;
   3) case $Dezena$Unidade in
      30) echo -n "trinta" >> /tmp/resultado-$$ ;;
      3*) echo -n "trinta e " >> /tmp/resultado-$$ ; Unidade $2 >> /tmp/resultado-$$ ;;
   esac ;;
   4) case $Dezena$Unidade in
      40) echo -n "quarenta" >> /tmp/resultado-$$ ;;
      4*) echo -n "quarenta e " >> /tmp/resultado-$$ ; Unidade $2 >> /tmp/resultado-$$ ;;
   esac ;;
   5) case $Dezena$Unidade in
      50) echo -n "cinquenta" >> /tmp/resultado-$$ ;;
      5*) echo -n "cinquenta e " >> /tmp/resultado-$$ ; Unidade $2 >> /tmp/resultado-$$ ;;
   esac ;;
   6) case $Dezena$Unidade in
      60) echo -n "sessenta" >> /tmp/resultado-$$ ;;
      6*) echo -n "sessenta e " >> /tmp/resultado-$$ ; Unidade $2 >> /tmp/resultado-$$ ;;
   esac ;;
   7) case $Dezena$Unidade in
      70) echo -n "setenta" >> /tmp/resultado-$$ ;;
      7*) echo -n "setenta e " >> /tmp/resultado-$$ ; Unidade $2 >> /tmp/resultado-$$ ;;
   esac ;;
   8) case $Dezena$Unidade in
      80) echo -n "oitenta" >> /tmp/resultado-$$ ;;
      8*) echo -n "oitenta e " >> /tmp/resultado-$$ ; Unidade $2 >> /tmp/resultado-$$ ;;
   esac ;;
   9) case $Dezena$Unidade in
      90) echo -n "noventa" >> /tmp/resultado-$$ ;;
      9*) echo -n "noventa e " >> /tmp/resultado-$$ ; Unidade $2 >> /tmp/resultado-$$ ;;
   esac ;;
esac 
}

# Função para ler as dezenas de horas. A meia noite deve escrever zero hora:
DezenaHora () {
# Coletando o número da dezena:
Dezena=`cat /tmp/valor-$$ | cut -c$1`
# Coletando o número da unidade:
Unidade=`cat /tmp/valor-$$ | cut -c$2`
case $Dezena in
   0) case $Dezena$Unidade in
      0) echo -n "zero" >> /tmp/resultado-$$ ;;
      0*) UnidadeHora $2 >> /tmp/resultado-$$ ;;
   esac ;;
   1) case $Dezena$Unidade in
      10) echo -n "déz" >> /tmp/resultado-$$ ;;
      11) echo -n "onze" >> /tmp/resultado-$$ ;;
      12) echo -n "doze" >> /tmp/resultado-$$ ;;
      13) echo -n "treze" >> /tmp/resultado-$$ ;;
      14) echo -n "catorze" >> /tmp/resultado-$$ ;;
      15) echo -n "quinze" >> /tmp/resultado-$$ ;;
      16) echo -n "dezeseis" >> /tmp/resultado-$$ ;;
      17) echo -n "dezesete" >> /tmp/resultado-$$ ;;
      18) echo -n "dezoito" >> /tmp/resultado-$$ ;;
      19) echo -n "dezenove" >> /tmp/resultado-$$ ;;
   esac ;;
   2) case $Dezena$Unidade in
      20) echo -n "vinte" >> /tmp/resultado-$$ ;;
      2*) echo -n "vinte e " >> /tmp/resultado-$$ ; UnidadeHora $2 >> /tmp/resultado-$$ ;;
   esac ;;
   3) case $Dezena$Unidade in
      30) echo -n "trinta" >> /tmp/resultado-$$ ;;
      3*) echo -n "trinta e " >> /tmp/resultado-$$ ; UnidadeHora $2 >> /tmp/resultado-$$ ;;
   esac ;;
   4) case $Dezena$Unidade in
      40) echo -n "quarenta" >> /tmp/resultado-$$ ;;
      4*) echo -n "quarenta e " >> /tmp/resultado-$$ ; UnidadeHora $2 >> /tmp/resultado-$$ ;;
   esac ;;
   5) case $Dezena$Unidade in
      50) echo -n "cinquenta" >> /tmp/resultado-$$ ;;
      5*) echo -n "cinquenta e " >> /tmp/resultado-$$ ; UnidadeHora $2 >> /tmp/resultado-$$ ;;
   esac ;;
   6) case $Dezena$Unidade in
      60) echo -n "sessenta" >> /tmp/resultado-$$ ;;
      6*) echo -n "sessenta e " >> /tmp/resultado-$$ ; UnidadeHora $2 >> /tmp/resultado-$$ ;;
   esac ;;
   7) case $Dezena$Unidade in
      70) echo -n "setenta" >> /tmp/resultado-$$ ;;
      7*) echo -n "setenta e " >> /tmp/resultado-$$ ; UnidadeHora $2 >> /tmp/resultado-$$ ;;
   esac ;;
   8) case $Dezena$Unidade in
      80) echo -n "oitenta" >> /tmp/resultado-$$ ;;
      8*) echo -n "oitenta e " >> /tmp/resultado-$$ ; UnidadeHora $2 >> /tmp/resultado-$$ ;;
   esac ;;
   9) case $Dezena$Unidade in
      90) echo -n "noventa" >> /tmp/resultado-$$ ;;
      9*) echo -n "noventa e " >> /tmp/resultado-$$ ; UnidadeHora $2 >> /tmp/resultado-$$ ;;
   esac ;;
esac 
}

# Função para ler até 999:
Centena () {
# Coletando o número da centena:
Centena=`cat /tmp/valor-$$ | cut -c$1`
# Coletando o número da dezena:
Dezena=`cat /tmp/valor-$$ | cut -c$2`
# Coletando o número da unidade:
Unidade=`cat /tmp/valor-$$ | cut -c$3`
case $Centena in
   0) case $Centena$Dezena$Unidade in
      0)  echo -n "0" > /dev/null ;;
      0*) Dezena $2 $3 >> /tmp/resultado-$$ ;;
   esac ;;
   1) case $Centena$Dezena$Unidade in
      100) echo -n "cem" >> /tmp/resultado-$$ ;;
      1*) echo -n "cento e " >> /tmp/resultado-$$ ; Dezena $2 $3 >> /tmp/resultado-$$ ;;
   esac ;;
   2)case $Centena$Dezena$Unidade in
      200) echo -n "duzentos" >> /tmp/resultado-$$ ;;
      2*) echo -n "duzentos e " >> /tmp/resultado-$$ ; Dezena $2 $3 >> /tmp/resultado-$$ ;;
   esac ;;
   3) case $Centena$Dezena$Unidade in
      300) echo -n "trezentos" >> /tmp/resultado-$$ ;;
      3*) echo -n "trezentos e " >> /tmp/resultado-$$ ; Dezena $2 $3 >> /tmp/resultado-$$ ;;
   esac ;;
   4) case $Centena$Dezena$Unidade in
      400) echo -n "quatrocentos" >> /tmp/resultado-$$ ;;
      4*) echo -n "quatrocentos e " >> /tmp/resultado-$$ ; Dezena $2 $3 >> /tmp/resultado-$$ ;;
   esac ;;
   5) case $Centena$Dezena$Unidade in
      500) echo -n "quinhentos" >> /tmp/resultado-$$ ;;
      5*) echo -n "quinhentos e " >> /tmp/resultado-$$ ; Dezena $2 $3 >> /tmp/resultado-$$ ;;
   esac ;;
   6) case $Centena$Dezena$Unidade in
      600) echo -n "seiscentos" >> /tmp/resultado-$$ ;;
      6*) echo -n "seiscentos e " >> /tmp/resultado-$$ ; Dezena $2 $3 >> /tmp/resultado-$$ ;;
   esac ;;
   7) case $Centena$Dezena$Unidade in
      700) echo -n "setecentos" >> /tmp/resultado-$$ ;;
      7*) echo -n "setecentos e " >> /tmp/resultado-$$ ; Dezena $2 $3 >> /tmp/resultado-$$ ;;
   esac ;;
   8) case $Centena$Dezena$Unidade in
      800) echo -n "oitocentos" >> /tmp/resultado-$$ ;;
      8*) echo -n "oitocentos e " >> /tmp/resultado-$$ ; Dezena $2 $3 >> /tmp/resultado-$$ ;;
   esac ;;
   9) case $Centena$Dezena$Unidade in
      900) echo -n "novecentos" >> /tmp/resultado-$$ ;;
      9*) echo -n "novecentos e " >> /tmp/resultado-$$ ; Dezena $2 $3 >> /tmp/resultado-$$ ;;
   esac ;;
esac
}

# Função para inserir as concordâncias nominais após os valores numéricos lidos em cada unidade, dezena ou centena.
# NOTE - Deve ser chamada sempre após a leitura da unidade, dezena ou centena, nunca antes da leitura.
ConcordanciaCentenaNumerica () {
   # Deve receber como parâmetro a posição da centena que está sendo lida:
   case $1 in
      1) case $ValorCentena in
         1) echo -n "" >>/tmp/resultado-$$ ;;
         *) echo -n "" >>/tmp/resultado-$$ ;;
      esac ;;
      2) case $ValorCentena in
         000) echo -n " de " >>/tmp/resultado-$$ ;;
         *) echo -n " mil e " >>/tmp/resultado-$$ ;;
      esac ;;
      3) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " milhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " milhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      4) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " bilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " bilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      5) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " trilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " trilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      6) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " quadrilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " quadrilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      7) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " quintilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " quintilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      8) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " sextilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " sextilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      9) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " setilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " setilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      10) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " octilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " octilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      11) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " nonilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " nonilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      12) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " decilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " decilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      13) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " undecilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " undecilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      14) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " duodecilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " duodecilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      15) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " tredecilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " tredecilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      16) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " quatordecilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " quatordecilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      17) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " quindecilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " quindecilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      18) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " sexdecilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " sexdecilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      19) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " setedecilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " setedecilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      20) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " octodecilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " octodecilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      21) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " novedecilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " novedecilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      21) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " vigesilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " vigesilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
   esac   
}

# Função para inserir as concordâncias nominais após os valores monetários lidos em cada unidade, dezena ou centena.
# NOTE - Deve ser chamada sempre após a leitura da unidade, dezena ou centena, nunca antes da leitura.
ConcordanciaCentenaMonetaria () {
   # Deve receber como parâmetro a posição da centena que está sendo lida:
   case $1 in
      1) case $ValorCentena in
         1) echo -n " real " >>/tmp/resultado-$$ ;;
         *) echo -n " reais " >>/tmp/resultado-$$ ;;
      esac ;;
      2) case $ValorCentena in
         000) echo -n " de " >>/tmp/resultado-$$ ;;
         *) echo -n " mil e " >>/tmp/resultado-$$ ;;
      esac ;;
      3) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " milhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " milhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      4) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " bilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " bilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      5) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " trilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " trilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      6) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " quadrilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " quadrilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      7) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " quintilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " quintilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      8) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " sextilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " sextilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      9) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " setilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " setilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      10) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " octilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " octilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      11) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " nonilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " nonilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      12) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " decilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " decilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      13) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " undecilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " undecilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      14) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " duodecilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " duodecilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      15) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " tredecilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " tredecilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      16) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " quatordecilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " quatordecilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      17) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " quindecilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " quindecilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      18) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " sexdecilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " sexdecilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      19) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " setedecilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " setedecilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      20) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " octodecilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " octodecilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      21) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " novedecilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " novedecilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
      21) case $ValorCentena in
         000) echo -n "" > /dev/null ;;
         1) echo -n " vigesilhão, " >>/tmp/resultado-$$ ;;
         *) echo -n " vigesilhões, " >>/tmp/resultado-$$ ;;
      esac ;;
   esac   
}

# Função para ler os meses do ano:
Meses () {
# O número do mês deve ser passado por parâmetro em $1
case $1 in
   1|01) echo -n "Janeiro" >> /tmp/resultado-$$ ;;
   2|02) echo -n "fevereiro" >> /tmp/resultado-$$ ;;
   3|03) echo -n "março" >> /tmp/resultado-$$ ;;
   4|04) echo -n "abril" >> /tmp/resultado-$$ ;;
   5|05) echo -n "maio" >> /tmp/resultado-$$ ;;
   6|06) echo -n "junho" >> /tmp/resultado-$$ ;;
   7|07) echo -n "julho" >> /tmp/resultado-$$ ;;
   8|08) echo -n "agosto" >> /tmp/resultado-$$ ;;
   9|09) echo -n "setembro" >> /tmp/resultado-$$ ;;
   10) echo -n "outubro" >> /tmp/resultado-$$ ;;
   11) echo -n "novembro" >> /tmp/resultado-$$ ;;
   12) echo -n "dezembro" >> /tmp/resultado-$$ ;;
   *) echo "ERRO [ $2 ] parâmetro incorreto para meses do ano (1-12)" > /tmp/resultado-$$ ;;
esac
}

# Função que mostra o resultado na tela depois que os valores foram lidos:
MostraResultado () {
# Exibindo o resultado:
Resultado=`cat /tmp/resultado-$$`
echo "$Resultado"
}

# Função que remove todos os arquivos temporários criados durante a execução do script:
RemoveTemporarios () {
# Removendo os arquivos temporários:
rm -Rf /tmp/*-$$
}

#-------------------------------------------------------------------------------------
# Tratando somene as opções de ajuda:
case $1 in
#-------------------------------------------------------------------------------------
# Mostra a ajuda geral e sai do script:
   -h|--help)
   clear
   echo "$Ajuda $Opcoes"
   echo
   exit 0 ;;
#-------------------------------------------------------------------------------------
# Mostra a versão atual do script e sai:
   -v|--versao)
   clear
   echo " [`basename $0`]"
   echo
   # Buscando a versão:
   grep '^# Versão ' "$0" | tail -1 | cut -d : -f 1 | tr -d \#
   # Buscando o autor e a data:
   grep '^# Versão ' "$0" | tail -1 | cut -d : -f 2 | tr -d \#
   echo
   # Buscando a descrição da versão:
   grep '^# Versão ' "$0" | tail -1 | cut -d : -f 3 | tr -d \#
   echo 
   exit 0 ;;
#-------------------------------------------------------------------------------------
# Mostra exemplos de execução do script e sai:
   -e|--exemplo)
   clear
   echo " [`basename $0`]"
   echo
   echo " Voce pode executar este script das seguntes formas:"
   echo "$Exemplos"
   echo
   exit 0 ;;
#-------------------------------------------------------------------------------------
# Lista todas as dependências do script e verifica quais estão faltando. Após sai:
   -d|--depende)
   clear
   echo " [`basename $0`]"
   echo
   # Aqui está a lista de dependências do script:
   Dependencias="
   cat
   tac
   seq
   grep
   mv
   cut
   sed
   wc
   bc
   tee
   rm
   "
   # Exibindo a lista de dependências:
   echo "   =============================================================="
   echo "   Este script posui as seguintes dependências:"
   echo "   $Dependencias"
   echo "   =============================================================="
   echo "   Verificando se todas as dependênicas estão satisfeitas:"
   echo
   # Retornando o IFS normal para o for poder trabalhar com espaços como delimitadores de string:
   IFS="$Ifsvelho"
   for x in "$Dependencias" ; do
      # Verificando se a dependência está instalada:
      which $x >&2> /dev/null
      if [ $? = 0 ]; then
         touch /tmp/depende-$$
      else
         echo "$x" >> /tmp/depende-$$
      fi
   done
   # Modificando novamente o IFS para ler nomes com espaços:
   IFS='
'
   # Caso foi encontrado alguma dependência faltando no sistema, coloca-se elas em uma variável e se da a mensagem final antes de sair do script:
   Depende=`cat /tmp/depende-$$`
   if [ ! -z $Depende ]; then
      echo "   ÔÔPss!"
      echo "   Foram ecnontradas as seguintes dependências em seu sistema:"
      echo "   $Depende"
      echo "   Caso o script não consiga resolvê-las, instalá-las manualmente"
      echo
      rm -Rf /tmp/*-$$
   else
      echo "   OK"
      echo "   Todas as dependências necessárias foram satisfeitas"
      echo
      rm -Rf /tmp/*-$$
   fi
   exit 0 ;;
#-------------------------------------------------------------------------------------
# Aqui ele simplismente ignora a opção e passa a diante entrando no while de processamento, pois todas as opções a baixo são as opções de leitura de números. Se ele sair aqui ele nunca irá processar nada a não ser as opções de ajuda:
      -n|--numero) echo "" > /dev/null ;;
      -V|--valor) echo "" > /dev/null ;;
      -D|--data) echo "" > /dev/null ;;
      -H|--hora) echo "" > /dev/null ;;
      -s|--semana) echo "" > /dev/null ;;
      -m|--mes) echo "" > /dev/null ;;
#-------------------------------------------------------------------------------------
# Caso seja passado uma opção desconhecida, da a mensagem de erro e sai:
      *)
      if test -n "$1" ; then # Ou if [ -n "$1" ]; then
         clear
         echo "Opção inválida [ $1 ]"
         echo "Utilize as seguntes opções $Opcoes"
         echo
         exit 1
      fi ;;
esac

# Fazendo a leitura dos dados de acordo com as opções passadas:
# Se o usuário não passou a opção e o parâmetro necessário para o processamento, simplesmente não faz nada:
while [ -n "$1" ] && [ -n "$2" ] ; do
   case "$1" in
#-------------------------------------------------------------------------------------
      -n|--numero)
      # Preparando o número a ser escrito por extenso:
      echo $2 > /tmp/valor-$$
      # Verificando se o usuário digitou algo:
      grep [0123456789] /tmp/valor-$$ > /dev/null
      [ $? != 0 ] && echo "ERRO = Nenhum número encontrado para processar" > /tmp/resultado-$$
      # Verificando se o usuário digitou letras:
      grep -i [abcdefghijlmnopqrstuvxzywk] /tmp/valor-$$ > /dev/null
      [ $? = 0 ] && echo "ERRO = Número inválido, possui letras" > /tmp/resultado-$$
      # Apagando todos os zeros que por ventura o usuário tenha digitado a esquerda e que não possuem valor. Ex.: 000010,32
      cat /tmp/valor-$$ | sed 's/^0\+//g' > /tmp/sem-zeros-esquerda-$$
      mv /tmp/sem-zeros-esquerda-$$ /tmp/valor-$$
      # Iniciando a leitura dos números:
      # Verificando se tem vírgula, se tiver pega só o que está após a vírgula e processa:
      grep "\," /tmp/valor-$$ > /dev/null
      # Caso o número digitado tenha vírgula:
      if [ $? = 0 ] ; then
         # Pegando somente as casas decimais para guardar para ser processado depois:
         CasasDecimais=`cat /tmp/valor-$$ | cut -d',' -f2`
         # Pegando os números inteiros sem os pontos para processar agora:
         Numero=`cat /tmp/valor-$$ | sed 's/\.//g' | cut -d',' -f1`
         # Colocando somente os números inteiros no arquivo de /tmp/valor-$$:
         echo "$Numero" > /tmp/valor-$$
         # Contando os caracteres dos números inteiros:
         Caracteres=`cat /tmp/valor-$$ | wc -c`
         CaracteresReal=$((Caracteres - 1))
         # Se a quantidade de caracteres for maior do que três então divide em blocos de três:
         if [ "$CaracteresReal" -ge 4 ] ; then
            # Zerando a contágem dos arquivos temporários de referência:
            CentenaInteiros="0"
            # Dividindo de três em três para fazer a leiutura:
            while [ "$CaracteresReal" -ge 3 ] ; do
               # Contando a centena de inteiros:
               CentenaInteiros=$((CentenaInteiros + 1))
               # Diminuindo 3 caracteres do total e marcando no nome de um arquivo temporário só como referência:
               CaracteresReal=$(echo "$CaracteresReal - 3" | bc | tee /tmp/centena-$CentenaInteiros-$$)
            done   
            # Contando quantas centena inteiras de três dígitos temos para ler:
            CentenasInteiraALer=`ls -1 /tmp/centena-*-$$ | wc -l`
            # Caso tenha sobrado algo, inicie a leitura por aqui:
            [ "$CaracteresReal" != "0" ] && {
               # Definindo qual será o caracter final da dezena, como sobraram no máximo 2 caracteres então o caractere inicial é 1 e o final é igual ao número de caracteres que sobrou dentro da variável CaracteresReal:
               CaracterFinal=$CaracteresReal
               # Pegando somente os dígitos que sobraram na última centena:
               ValorCentena=`echo $Numero | cut -c1-$CaracterFinal`
               # Colocando o valor da centena no arquivo /tmp/valor-$$ pois as funções de leitura só trabalham em cima desse arquivo:
               echo "$ValorCentena" > /tmp/valor-$$
               # Chamando a função corespondente para leitura:
               case $CaracteresReal in
                  1) Unidade 1 ;;
                  2) Dezena 1 2 ;;
                  3) Centena 1 2 3 ;;
               esac
               # Encontrando a posição da centena para inserir a concordância correta:
               PosicaoCentena=$((CentenasInteiraALer + 1))
               # Inserindo a concordância:
               ConcordanciaCentenaNumerica $PosicaoCentena >> /tmp/resultado-$$
               #Definindo o caracter inicial para a próxima centena:
               CaracterInicial=$((CaracterFinal + 1))
            }
            # Fazendo a leitura das outras centenas de 3 dígitos cada. Aqui é preciso inverter a sequência gerada pelo seq, pois é com base nela que a função ConcordanciaCentena trabalha:
            for x in `seq 1 $CentenasInteiraALer | tac` ; do
               # Definindo o caractere inicial caso não tenha sobrado nada na separação por centenas:
               [ "$CaracterInicial" ] || CaracterInicial="1"
               # Definindo o caracter final para esta centena que está sendo processada:
               CaracterFinal=$((CaracterInicial + 2))
               # Coletando os caracteres para serem lidos:
               ValorCentena=`echo $Numero | cut -c$CaracterInicial-$CaracterFinal`
               # Colocando o valor da centena no arquivo /tmp/valor-$$ pois as funções de leitura só trabalham em cima desse arquivo:
               echo "$ValorCentena" > /tmp/valor-$$
               # Como aqui dentro do for todas as centenas terão 3 dígitos, basta chamar a função Centena com seus parâmetros necessários:
               Centena 1 2 3      
               # Inserindo a concordância de acordo com a sequência gerada pelo seq e invertida pelo tac:
               ConcordanciaCentenaNumerica $x # >> /tmp/resultado-$$
               #Definindo o caracter inicial para a próxima centena:
               CaracterInicial=$((CaracterFinal + 1))
            done
         else
            # Caso o número a ser lido tenha no máximo 3 caracteres então não foi preciso divií-lo de 3 em 3 no processo acima. Então agora basta chamando a função corespondente de acordo com a quantidade real de caracteres que o número possui:
            case $CaracteresReal in
               1) Unidade 1 ; ConcordanciaCentenaNumerica 1 ;;
               2) Dezena 1 2 ; ConcordanciaCentenaNumerica 1 ;;
               3) Centena 1 2 3 ; ConcordanciaCentenaNumerica 1 ;;
            esac
         fi
         # Feito a leitura de todas as centenas dos números inteiros e já inserido suas respectivas concordâncias, agora é hora de ler as casas decimais pois o número possuia uma vírgula.
         # Se o valor das casas decimais for 00 não deve executar a leitura:
         [ "$CasasDecimais" != "00" ] && {
            # Contando quantos caracteres possui a casa decimal:
            CaracterDecimal=`echo "$CasasDecimais" | wc -c`
            CaracterDecimalReal=$((CaracterDecimal - 1))
            # Se o valor das casas decimais só tiver um único dígito (ex.: 14,3), então complete com zero:
            [ $CaracterDecimalReal -lt 2 ] && CasasDecimais=`echo $CasasDecimais{FONTE}`
            # Colocando somente as casas decimais no arquivo de /tmp/valor-$$ pois as funções de leitura só trabalham em cima desse arquivo:
            echo "$CasasDecimais" > /tmp/valor-$$
            # Inserindo a concordância entre os números inteiros e as casas decimais no arquivo de resultado:
            echo -n " vígula " >>/tmp/resultado-$$
            # Fazendo a leitura do valor das casas decimais. Como será lido somente dois dígitos, então basta chamar a função Dezena com seus parâmetros necessários:
            Dezena 1 2
         }
      # Caso o número digitado não tenha vírgula:
      else
         # Eliminando os pontos separadores de milhar caso o usuário os tenha digitado:
         Numero=`cat /tmp/valor-$$ | sed 's/\.//g'`
         # Colocando somente os números inteiros no arquivo de /tmp/valor-$$ pois as funções de leitura só trabalham em cima desse arquivo:
         echo "$Numero" > /tmp/valor-$$
         # Contando quantos caracteres compões o número:
         Caracteres=`cat /tmp/valor-$$ | wc -c`
         # Diminuindo o caracter de espaço ou nova linha que é inserido automaticamente quando se redireciona algo para um arquivo de texto:
         CaracteresReal=$((Caracteres - 1))
         # Se a quantidade de caracteres for maior do que três então divide em blocos de três:
         if [ "$CaracteresReal" -ge 4 ] ; then
            # Zerando a contágem das centenas dos números inteiros:
            CentenaInteiros="0"
            # Dividindo de três em três para fazer a leiutura:
            while [ "$CaracteresReal" -ge 3 ] ; do
               # Contando a centena de inteiros:
               CentenaInteiros=$((CentenaInteiros + 1))
               # Diminuindo 3 caracteres do total e marcando em um arquivo temporário:
               CaracteresReal=$(echo "$CaracteresReal - 3" | bc | tee /tmp/centena-$CentenaInteiros-$$)
            done   
            # Contando quantas centena inteiras de três dígitos temos para ler:
            CentenasInteiraALer=`ls -1 /tmp/centena-*-$$ | wc -l`
            # Caso tenha sobrado algo, inicie a leitura por aqui:
            [ "$CaracteresReal" != "0" ] && {
               # Definindo qual será o caracter final da dezena, como sobraram no máximo 2 caracteres então o caractere inicial é 1 o o final é igual ao número de caracteres que sobrou:
               CaracterFinal=$CaracteresReal
               # Pegando somente os dígitos que sobraram na última centena:
               ValorCentena=`echo $Numero | cut -c1-$CaracterFinal`
               # Colocando o valor da centena no arquivo /tmp/valor-$$:
               echo "$ValorCentena" > /tmp/valor-$$
               # Chamando a função corespondente para leitura:
               case $CaracteresReal in
                  1) Unidade 1 ;;
                  2) Dezena 1 2 ;;
                  3) Centena 1 2 3 ;;
               esac
               # Encontrando a posição da centena para inserir a concordância:
               PosicaoCentena=$((CentenasInteiraALer + 1))
               # Inserindo a concordância:
               ConcordanciaCentenaNumerica $PosicaoCentena >> /tmp/resultado-$$
               #Definindo o caracter inicial para a próxima centena:
               CaracterInicial=$((CaracterFinal + 1))
            }
            # Fazendo a leitura das outras centenas de 3 dígitos cada. Aqui é preciso inverter a sequência gerada pelo seq, pois é com base nela que a função ConcordanciaCentena trabalha:   
            for x in `seq 1 $CentenasInteiraALer | tac` ; do
               # Definindo o caractere inicial caso não tenha sobrado nada na separação por centenas:
               [ "$CaracterInicial" ] || CaracterInicial="1"
               # Definindo o caracter final para esta centena que está sendo processada:
               CaracterFinal=$((CaracterInicial + 2))
               # Coletando os caracteres para serem lidos:
               ValorCentena=`echo $Numero | cut -c$CaracterInicial-$CaracterFinal`
               # Colocando o valor da centena no arquivo /tmp/valor-$$:
               echo "$ValorCentena" > /tmp/valor-$$
               # Chamando a função corespondente para leitura:
               Centena 1 2 3
               # Inserindo a concordância:
               ConcordanciaCentenaNumerica $x # >> /tmp/resultado-$$
               #Definindo o caracter inicial para a próxima centena:
               CaracterInicial=$((CaracterFinal + 1))
            done
         else
            # Caso o número a ser lido tenha no máximo 3 caracteres então não foi preciso dividí-lo de 3 em 3 no processo acima. Então agora basta chamando a função corespondente de acordo com a quantidade real de caracteres que o número possui:
            # Coletando o valor da centena para servir de referência para a função ConcordanciaCentena:
            ValorCentena=`cat /tmp/valor-$$`
            # Aqui é preciso analizar quantos caracteres tem (unidade, dezena ou centena), chamar a função corespondente para fazer a leitura do número, e depois chamar a função ConcordanciaCentena para inserir a concordância final:
            case $CaracteresReal in
               1) Unidade 1 ; ConcordanciaCentenaNumerica 1 ;;
               2) Dezena 1 2 ; ConcordanciaCentenaNumerica 1 ;;
               3) Centena 1 2 3 ; ConcordanciaCentenaNumerica 1 ;;
            esac
         fi
      fi 
      # Exibindo o resultado:
      MostraResultado ;;
#-------------------------------------------------------------------------------------
      -V|--valor)
      # Preparando o número a ser escrito por extenso:
      echo $2 > /tmp/valor-$$
      # Verificando se o usuário digitou algo:
      grep [0123456789] /tmp/valor-$$ > /dev/null
      [ $? != 0 ] && echo "ERRO = Nenhum número encontrado para processar" > /tmp/resultado-$$
      # Verificando se o usuário digitou letras:
      grep -i [abcdefghijlmnopqrstuvxzywk] /tmp/valor-$$ > /dev/null
      [ $? = 0 ] && echo "ERRO = Número inválido, possui letras" > /tmp/resultado-$$
      # Apagando todos os zeros que por ventura o usuário tenha digitado a esquerda e que não possuem valor. Ex.: 000010,32
      cat /tmp/valor-$$ | sed 's/^0\+//g' > /tmp/sem-zeros-esquerda-$$
      mv /tmp/sem-zeros-esquerda-$$ /tmp/valor-$$
      # Iniciando a leitura dos números:
      # Verificando se tem vírgula, se tiver pega só o que está após a vírgula e processa:
      grep "\," /tmp/valor-$$ > /dev/null
      # Caso o número digitado tenha vírgula:
      if [ $? = 0 ] ; then
         # Pegando somente as casas decimais para guardar para ser processado depois:
         CasasDecimais=`cat /tmp/valor-$$ | cut -d',' -f2`
         # Pegando os números inteiros sem os pontos para processar agora:
         Numero=`cat /tmp/valor-$$ | sed 's/\.//g' | cut -d',' -f1`
         # Colocando somente os números inteiros no arquivo de /tmp/valor-$$:
         echo "$Numero" > /tmp/valor-$$
         # Contando os caracteres dos números inteiros:
         Caracteres=`cat /tmp/valor-$$ | wc -c`
         CaracteresReal=$((Caracteres - 1))
         # Se a quantidade de caracteres for maior do que três então divide em blocos de três:
         if [ "$CaracteresReal" -ge 4 ] ; then
            # Zerando a contágem dos arquivos temporários de referência:
            CentenaInteiros="0"
            # Dividindo de três em três para fazer a leiutura:
            while [ "$CaracteresReal" -ge 3 ] ; do
               # Contando a centena de inteiros:
               CentenaInteiros=$((CentenaInteiros + 1))
               # Diminuindo 3 caracteres do total e marcando no nome de um arquivo temporário só como referência:
               CaracteresReal=$(echo "$CaracteresReal - 3" | bc | tee /tmp/centena-$CentenaInteiros-$$)
            done   
            # Contando quantas centena inteiras de três dígitos temos para ler:
            CentenasInteiraALer=`ls -1 /tmp/centena-*-$$ | wc -l`
            # Caso tenha sobrado algo, inicie a leitura por aqui:
            [ "$CaracteresReal" != "0" ] && {
               # Definindo qual será o caracter final da dezena, como sobraram no máximo 2 caracteres então o caractere inicial é 1 e o final é igual ao número de caracteres que sobrou dentro da variável CaracteresReal:
               CaracterFinal=$CaracteresReal
               # Pegando somente os dígitos que sobraram na última centena:
               ValorCentena=`echo $Numero | cut -c1-$CaracterFinal`
               # Colocando o valor da centena no arquivo /tmp/valor-$$ pois as funções de leitura só trabalham em cima desse arquivo:
               echo "$ValorCentena" > /tmp/valor-$$
               # Chamando a função corespondente para leitura:
               case $CaracteresReal in
                  1) Unidade 1 ;;
                  2) Dezena 1 2 ;;
                  3) Centena 1 2 3 ;;
               esac
               # Encontrando a posição da centena para inserir a concordância correta:
               PosicaoCentena=$((CentenasInteiraALer + 1))
               # Inserindo a concordância:
               ConcordanciaCentenaMonetaria $PosicaoCentena >> /tmp/resultado-$$
               #Definindo o caracter inicial para a próxima centena:
               CaracterInicial=$((CaracterFinal + 1))
            }
            # Fazendo a leitura das outras centenas de 3 dígitos cada. Aqui é preciso inverter a sequência gerada pelo seq, pois é com base nela que a função ConcordanciaCentena trabalha:
            for x in `seq 1 $CentenasInteiraALer | tac` ; do
               # Definindo o caractere inicial caso não tenha sobrado nada na separação por centenas:
               [ "$CaracterInicial" ] || CaracterInicial="1"
               # Definindo o caracter final para esta centena que está sendo processada:
               CaracterFinal=$((CaracterInicial + 2))
               # Coletando os caracteres para serem lidos:
               ValorCentena=`echo $Numero | cut -c$CaracterInicial-$CaracterFinal`
               # Colocando o valor da centena no arquivo /tmp/valor-$$ pois as funções de leitura só trabalham em cima desse arquivo:
               echo "$ValorCentena" > /tmp/valor-$$
               # Como aqui dentro do for todas as centenas terão 3 dígitos, basta chamar a função Centena com seus parâmetros necessários:
               Centena 1 2 3      
               # Inserindo a concordância de acordo com a sequência gerada pelo seq e invertida pelo tac:
               ConcordanciaCentenaMonetaria $x # >> /tmp/resultado-$$
               #Definindo o caracter inicial para a próxima centena:
               CaracterInicial=$((CaracterFinal + 1))
            done
         else
            # Caso o número a ser lido tenha no máximo 3 caracteres então não foi preciso divií-lo de 3 em 3 no processo acima. Então agora basta chamando a função corespondente de acordo com a quantidade real de caracteres que o número possui:
            case $CaracteresReal in
               1) Unidade 1 ; ConcordanciaCentenaMonetaria 1 ;;
               2) Dezena 1 2 ; ConcordanciaCentenaMonetaria 1 ;;
               3) Centena 1 2 3 ; ConcordanciaCentenaMonetaria 1 ;;
            esac
         fi
         # Feito a leitura de todas as centenas dos números inteiros e já inserido suas respectivas concordâncias, agora é hora de ler as casas decimais pois o número possuia uma vírgula.
         # Se o valor das casas decimais for 00 não deve executar a leitura:
         [ "$CasasDecimais" != "00" ] && {
            # Contando quantos caracteres possui a casa decimal:
            CaracterDecimal=`echo "$CasasDecimais" | wc -c`
            CaracterDecimalReal=$((CaracterDecimal - 1))
            # Se o valor das casas decimais só tiver um único dígito (ex.: 14,3), então complete com zero:
            [ $CaracterDecimalReal -lt 2 ] && CasasDecimais=`echo $CasasDecimais{FONTE}`
            # Colocando somente as casas decimais no arquivo de /tmp/valor-$$ pois as funções de leitura só trabalham em cima desse arquivo:
            echo "$CasasDecimais" > /tmp/valor-$$
            # Inserindo a concordância entre os números inteiros e as casas decimais no arquivo de resultado:
            echo -n "com " >>/tmp/resultado-$$
            # Fazendo a leitura do valor das casas decimais. Como será lido somente dois dígitos, então basta chamar a função Dezena com seus parâmetros necessários:
            Dezena 1 2
            # Inserindo a finalização de concordância:
            echo -n " centavos" >>/tmp/resultado-$$
         }
      # Caso o número digitado não tenha vírgula:
      else
         # Eliminando os pontos separadores de milhar caso o usuário os tenha digitado:
         Numero=`cat /tmp/valor-$$ | sed 's/\.//g'`
         # Colocando somente os números inteiros no arquivo de /tmp/valor-$$ pois as funções de leitura só trabalham em cima desse arquivo:
         echo "$Numero" > /tmp/valor-$$
         # Contando quantos caracteres compões o número:
         Caracteres=`cat /tmp/valor-$$ | wc -c`
         # Diminuindo o caracter de espaço ou nova linha que é inserido automaticamente quando se redireciona algo para um arquivo de texto:
         CaracteresReal=$((Caracteres - 1))
         # Se a quantidade de caracteres for maior do que três então divide em blocos de três:
         if [ "$CaracteresReal" -ge 4 ] ; then
            # Zerando a contágem das centenas dos números inteiros:
            CentenaInteiros="0"
            # Dividindo de três em três para fazer a leiutura:
            while [ "$CaracteresReal" -ge 3 ] ; do
               # Contando a centena de inteiros:
               CentenaInteiros=$((CentenaInteiros + 1))
               # Diminuindo 3 caracteres do total e marcando em um arquivo temporário:
               CaracteresReal=$(echo "$CaracteresReal - 3" | bc | tee /tmp/centena-$CentenaInteiros-$$)
            done   
            # Contando quantas centena inteiras de três dígitos temos para ler:
            CentenasInteiraALer=`ls -1 /tmp/centena-*-$$ | wc -l`
            # Caso tenha sobrado algo, inicie a leitura por aqui:
            [ "$CaracteresReal" != "0" ] && {
               # Definindo qual será o caracter final da dezena, como sobraram no máximo 2 caracteres então o caractere inicial é 1 o o final é igual ao número de caracteres que sobrou:
               CaracterFinal=$CaracteresReal
               # Pegando somente os dígitos que sobraram na última centena:
               ValorCentena=`echo $Numero | cut -c1-$CaracterFinal`
               # Colocando o valor da centena no arquivo /tmp/valor-$$:
               echo "$ValorCentena" > /tmp/valor-$$
               # Chamando a função corespondente para leitura:
               case $CaracteresReal in
                  1) Unidade 1 ;;
                  2) Dezena 1 2 ;;
                  3) Centena 1 2 3 ;;
               esac
               # Encontrando a posição da centena para inserir a concordância:
               PosicaoCentena=$((CentenasInteiraALer + 1))
               # Inserindo a concordância:
               ConcordanciaCentenaMonetaria $PosicaoCentena >> /tmp/resultado-$$
               #Definindo o caracter inicial para a próxima centena:
               CaracterInicial=$((CaracterFinal + 1))
            }
            # Fazendo a leitura das outras centenas de 3 dígitos cada. Aqui é preciso inverter a sequência gerada pelo seq, pois é com base nela que a função ConcordanciaCentena trabalha:   
            for x in `seq 1 $CentenasInteiraALer | tac` ; do
               # Definindo o caractere inicial caso não tenha sobrado nada na separação por centenas:
               [ "$CaracterInicial" ] || CaracterInicial="1"
               # Definindo o caracter final para esta centena que está sendo processada:
               CaracterFinal=$((CaracterInicial + 2))
               # Coletando os caracteres para serem lidos:
               ValorCentena=`echo $Numero | cut -c$CaracterInicial-$CaracterFinal`
               # Colocando o valor da centena no arquivo /tmp/valor-$$:
               echo "$ValorCentena" > /tmp/valor-$$
               # Chamando a função corespondente para leitura:
               Centena 1 2 3
               # Inserindo a concordância:
               ConcordanciaCentenaMonetaria $x # >> /tmp/resultado-$$
               #Definindo o caracter inicial para a próxima centena:
               CaracterInicial=$((CaracterFinal + 1))
            done
         else
            # Caso o número a ser lido tenha no máximo 3 caracteres então não foi preciso dividí-lo de 3 em 3 no processo acima. Então agora basta chamando a função corespondente de acordo com a quantidade real de caracteres que o número possui:
            # Coletando o valor da centena para servir de referência para a função ConcordanciaCentena:
            ValorCentena=`cat /tmp/valor-$$`
            # Aqui é preciso analizar quantos caracteres tem (unidade, dezena ou centena), chamar a função corespondente para fazer a leitura do número, e depois chamar a função ConcordanciaCentena para inserir a concordância final:
            case $CaracteresReal in
               1) Unidade 1 ; ConcordanciaCentenaMonetaria 1 ;;
               2) Dezena 1 2 ; ConcordanciaCentenaMonetaria 1 ;;
               3) Centena 1 2 3 ; ConcordanciaCentenaMonetaria 1 ;;
            esac
         fi
      fi 
      # Exibindo o resultado:
      MostraResultado ;;
#-------------------------------------------------------------------------------------
      -D|--data)
      # Separando as partes de dia, mês e ano:
      Dia=`echo $2 | cut -d'/' -f1`
      Mes=`echo $2 | cut -d'/' -f2`
      Ano=`echo $2 | cut -d'/' -f3`
      # Verificando o mês inforamdo não maior do que 12:
      [ $Mes -gt 12 ] && { echo "ERRO, UM ANO SÓ TEM 12 MÊSES" ; RemoveTemporarios ; exit 1 ; }
      # Verificando se o ano é ou não bissexto:
      if(( ("$Ano"%400)=="0")) || (( ("$Ano"%4=="0")&&("$Ano"%100!="0") )); then
         # É bisexto:
         Bissexto=1
      else
         # Não é bisexto:
         Bissexto=0
      fi
      # Verificando o dia informado na data de acordo com a quantidade de dias do mês:
      # Janeiro:
      [ "$Mes" = "01" -a "$Dia" -gt 31 ] && { echo "ERRO, JANEIRO SÓ TEM 31 DIAS" ; RemoveTemporarios ; exit 1 ; }
      # Fevereiro:
      case $Bissexto in
         0) [ "$Mes" = "02" -a "$Dia" -gt 28 ] && { echo "ERRO, FEVEREIRO EM ANOS NÃO BISEXTO SÓ TEM 28 DIAS" ; RemoveTemporarios ; exit 1 ; } ;;
         1) [ "$Mes" = "02" -a "$Dia" -gt 29 ] && { echo "ERRO, FEVEREIRO EM ANOS BISEXTOS SÓ TEM 29 DIAS" ; RemoveTemporarios ; exit 1 ; } ;;
      esac
      # Março:
      [ "$Mes" = "03" -a "$Dia" -gt 31 ] && { echo "ERRO, MARÇO SÓ TEM 31 DIAS" ; RemoveTemporarios ; exit 1 ; }
      # Abril:
      [ "$Mes" = "04" -a "$Dia" -gt 30 ] && { echo "ERRO, ABRIL SÓ TEM 30 DIAS" ; RemoveTemporarios ; exit 1 ; }
      # Maio:
      [ "$Mes" = "05" -a "$Dia" -gt 31 ] && { echo "ERRO, MAIO SÓ TEM 31 DIAS" ; RemoveTemporarios ; exit 1 ; }
      # Junho:
      [ "$Mes" = "06" -a "$Dia" -gt 30 ] && { echo "ERRO, JUNHO SÓ TEM 30 DIAS" ; RemoveTemporarios ; exit 1 ; }
      # Julho:
      [ "$Mes" = "07" -a "$Dia" -gt 31 ] && { echo "ERRO, JULHO SÓ TEM 31 DIAS" ; RemoveTemporarios ; exit 1 ; }
      # Agosto:
      [ "$Mes" = "08" -a "$Dia" -gt 31 ] && { echo "ERRO, AGOSTO SÓ TEM 31 DIAS" ; RemoveTemporarios ; exit 1 ; }
      # Setembro:
      [ "$Mes" = "09" -a "$Dia" -gt 30 ] && { echo "ERRO, SETEMBRO SÓ TEM 30 DIAS" ; RemoveTemporarios ; exit 1 ; }
      # Outubro:
      [ "$Mes" = "10" -a "$Dia" -gt 31 ] && { echo "ERRO, OUTUBRO SÓ TEM 31 DIAS" ; RemoveTemporarios ; exit 1 ; }
      # Novembro:
      [ "$Mes" = "11" -a "$Dia" -gt 30 ] && { echo "ERRO, NOVEMBRO SÓ TEM 30 DIAS" ; RemoveTemporarios ; exit 1 ; }
      # Dezembro:
      [ "$Mes" = "12" -a "$Dia" -gt 31 ] && { echo "ERRO, DEZEMBRO SÓ TEM 31 DIAS" ; RemoveTemporarios ; exit 1 ; }
      # Fazendo a leitura do dia:
      echo $Dia > /tmp/valor-$$
      DezenaData 1 2
      # Inserindo a concordância:
      echo -n " de " >> /tmp/resultado-$$
      # Fazendo a leitura do mês:
      Meses $Mes
      # Inserindo a concordância:
      echo -n " do ano " >> /tmp/resultado-$$
      # Fazendo a leitura do ano:
      echo $Ano | sed 's/[0]\+/0/g' > /tmp/valor-$$
      # Contando quantos caracteres compões o número:
      Caracteres=`cat /tmp/valor-$$ | wc -c`
      # Diminuindo o caracter de espaço ou nova linha que é inserido automaticamente quando se redireciona algo para um arquivo de texto:
      CaracteresReal=$((Caracteres - 1))
      # Se a quantidade de caracteres for maior do que três então divide em blocos de três:
      if [ "$CaracteresReal" -ge 4 ] ; then
         # Zerando a contágem das centenas dos números inteiros:
         CentenaInteiros="0"
         # Dividindo de três em três para fazer a leiutura:
         while [ "$CaracteresReal" -ge 3 ] ; do
            # Contando a centena de inteiros:
            CentenaInteiros=$((CentenaInteiros + 1))
            # Diminuindo 3 caracteres do total e marcando em um arquivo temporário:
            CaracteresReal=$(echo "$CaracteresReal - 3" | bc | tee /tmp/centena-$CentenaInteiros-$$)
         done   
         # Contando quantas centena inteiras de três dígitos temos para ler:
         CentenasInteiraALer=`ls -1 /tmp/centena-*-$$ | wc -l`
         # Caso tenha sobrado algo, inicie a leitura por aqui:
         [ "$CaracteresReal" != "0" ] && {
            # Definindo qual será o caracter final da dezena, como sobraram no máximo 2 caracteres então o caractere inicial é 1 o o final é igual ao número de caracteres que sobrou:
            CaracterFinal=$CaracteresReal
            # Pegando somente os dígitos que sobraram na última centena:
            ValorCentena=`echo $Ano | cut -c1-$CaracterFinal`
            # Colocando o valor da centena no arquivo /tmp/valor-$$:
            echo "$ValorCentena" > /tmp/valor-$$
            # Chamando a função corespondente para leitura:
            case $CaracteresReal in
               1) Unidade 1 ;;
               2) Dezena 1 2 ;;
               3) Centena 1 2 3 ;;
            esac
            # Encontrando a posição da centena para inserir a concordância:
            PosicaoCentena=$((CentenasInteiraALer + 1))
            # Inserindo a concordância:
            ConcordanciaCentenaNumerica $PosicaoCentena >> /tmp/resultado-$$
            #Definindo o caracter inicial para a próxima centena:
            CaracterInicial=$((CaracterFinal + 1))
         }
         # Fazendo a leitura das outras centenas de 3 dígitos cada. Aqui é preciso inverter a sequência gerada pelo seq, pois é com base nela que a função ConcordanciaCentena trabalha:   
         for x in `seq 1 $CentenasInteiraALer | tac` ; do
            # Definindo o caractere inicial caso não tenha sobrado nada na separação por centenas:
            [ "$CaracterInicial" ] || CaracterInicial="1"
            # Definindo o caracter final para esta centena que está sendo processada:
            CaracterFinal=$((CaracterInicial + 2))
            # Coletando os caracteres para serem lidos:
            ValorCentena=`echo $Ano | cut -c$CaracterInicial-$CaracterFinal`
            # Colocando o valor da centena no arquivo /tmp/valor-$$:
            echo "$ValorCentena" > /tmp/valor-$$
            # Chamando a função corespondente para leitura:
            Centena 1 2 3
            # Inserindo a concordância:
# NOTE Mudar para concordancia de números não monetários
            ConcordanciaCentenaNumerica $x # >> /tmp/resultado-$$
            #Definindo o caracter inicial para a próxima centena:
            CaracterInicial=$((CaracterFinal + 1))
         done
      else
         # Caso o número a ser lido tenha no máximo 3 caracteres então não foi preciso dividí-lo de 3 em 3 no processo acima. Então agora basta chamando a função corespondente de acordo com a quantidade real de caracteres que o número possui:
         case $CaracteresReal in
            1) Unidade 1 ;;
            2) Dezena 1 2 ;;
            3) Centena 1 2 3 ;;
         esac
      fi
      # Exibindo o resultado:
      MostraResultado ;;
#-------------------------------------------------------------------------------------
      -H|--hora)
      # Separando as partes de hora, minutos, e segundos:
      Hora="`echo $2 | cut -d':' -f1`"
      Minutos="`echo $2 | cut -d':' -f2`"
      Segundos="`echo $2 | cut -d':' -f3`"
      # Verificando se foi digitado letras na hora, se foi, remove os arquivos temporários e para tudo:
      echo "$Hora" | grep -i [abcdefghijlmnopqrstuvxzywkç] > /dev/null && { echo "HORA INCORRETA, POSSUI LETRAS" ; RemoveTemporarios ; break ; }
      # Verificando se foi digitado letras nos minutos, se foi, remove os arquivos temporários e para tudo:
      echo "$Minutos" | grep -i [abcdefghijlmnopqrstuvxzywkç] > /dev/null && { echo "MINUTOS INCORRETOS, POSSUEM LETRAS" ; RemoveTemporarios ; break ; }
      # Verificando se foi digitado letras nos segundo, se foi, remove o s arquivos temporários e para tudo:
      echo "$Segundos" | grep -i [abcdefghijlmnopqrstuvxzywkç] > /dev/null && { echo "SEGUNDOS INCORRETOS, POSSUEM LETRAS" ; RemoveTemporarios ; break ; }
      # Verificando se foi digitado mais de dois números para cada campo de hora/minuto/segundos:
      # Hora:
      [ `echo $Hora | wc -c` -gt 3 ] && { echo "HORA INCORRETA, POSSUI MUITOS NÚMEROS" ; RemoveTemporarios ; break ; }
      # Minutos:
      [ `echo $Minutos | wc -c` -gt 3 ] && { echo "MINUTOS INCORRETO, POSSUI MUITOS NÚMEROS" ; RemoveTemporarios ; break ; }
      # Segundos:
      [ `echo $Segundos | wc -c` -gt 3 ] && { echo "SEGUNDOS INCORRETOS, POSSUI MUITOS NÚMEROS" ; RemoveTemporarios ; break ; }
      # Fazendo a verificação se a hora informada não é maior do que 23 e fazendo a leitura da hora:
      if [ "$Hora" -le 23 ] ; then
         # Inserindo a hora no arquivo /tmp/valor-$$ e retirando os zeros repetidos a esquerda:
         echo $Hora | sed 's/[0]\+/0/g' > /tmp/valor-$$
         # Lendo a hora:
         DezenaHora 1 2
         # Inserindo a concordância:
         if [ "$Minutos" = "00" ] && [ "$Segundos" = "00" ] ; then
            case $Hora in
               00|01) echo -n " hora" >> /tmp/resultado-$$ ;;
               *) echo -n " horas" >> /tmp/resultado-$$ ;;
            esac
         else
            case $Hora in
               00|01) echo -n " hora com " >> /tmp/resultado-$$ ;;
               *) echo -n " horas com " >> /tmp/resultado-$$ ;;
            esac
         fi
      else
         # Da a mensagem de erro:
         echo "ERRO NAS HORAS, O DIA SÓ TEM 24 HORAS"
         # Remove todos os arquivos temporários:
         RemoveTemporarios
         # Para a execução do script:
         break
      fi
      # Fazendo a verificação se os minutos informados não são maiores do que 59 e fazendo a leitura dos minutos:
      if [ "$Minutos" -le 59 ] ; then
         # Inserindo os minutos no arquivo /tmp/valor-$$ e retirando os zeros repetidos a esquerda:
         echo $Minutos | sed 's/[0]\+/0/g' > /tmp/valor-$$
         # Lendo a hora:
         Dezena 1 2
         # Inserindo a concordância:
         if [ "$Segundos" = "00" ] ; then
            case $Minutos in
               00|01) echo -n " minuto" >> /tmp/resultado-$$ ;;
               *) echo -n " minutos" >> /tmp/resultado-$$ ;;
            esac
         else
            case $Minutos in
               00|01) echo -n " minuto e " >> /tmp/resultado-$$ ;;
               *) echo -n " minutos e " >> /tmp/resultado-$$ ;;
            esac
         fi
      else
         # Da a mensagem de erro:
         echo "ERRO NOS MINUTOS, UMA HORA SÓ TEM 60 MINUTOS"
         # Remove os arquivos temporários:
         RemoveTemporarios
         # Para a execução do script:
         break
      fi
      # Fazendo a verificação se os segundos informados não são maiores do que 59 e fazendo a leitura dos segundos:
      if [ "$Segundos" -le 59 ] ; then
         # Inserindo os segundos no arquivo /tmp/valor-$$:
         echo $Segundos | sed 's/[0]\+/0/g' > /tmp/valor-$$
         # Lendo a hora:
         Dezena 1 2
         # Inserindo a concordância:
         case $Segundos in
            0|00) echo -n "" >> /dev/null ;;
            1|01) echo -n " segundo" >> /tmp/resultado-$$ ;;
            *) echo -n " segundos" >> /tmp/resultado-$$ ;;
         esac
      else
         # Da a mensagem de erro:
         echo "ERRO NOS SEGUNDOS, UM MINUTO SÓ TEM 60 SEGUNDOS"
         # Remove os arquivos temporários:
         RemoveTemporarios
         # Para a execução do script:
         break
      fi
      # Exibindo o resultado:
      MostraResultado ;;
#-------------------------------------------------------------------------------------
      -o|--ordem)
      # Preparando o número a ser escrito por extenso:
      echo $2 > /tmp/valor-$$
      # Verificando se o usuário digitou algo:
      grep [0123456789] /tmp/valor-$$ > /dev/null
      [ $? != 0 ] && echo "ERRO = Nenhum número encontrado para processar" > /tmp/resultado-$$
      # Verificando se o usuário digitou letras:
      grep -i [abcdefghijlmnopqrstuvxzywk] /tmp/valor-$$ > /dev/null
      [ $? = 0 ] && echo "ERRO = Número inválido, possui letras" > /tmp/resultado-$$
      # Apagando todos os zeros que por ventura o usuário tenha digitado a esquerda e que não possuem valor. Ex.: 000010,32
      cat /tmp/valor-$$ | sed 's/^0\+//g' > /tmp/sem-zeros-esquerda-$$
      mv /tmp/sem-zeros-esquerda-$$ /tmp/valor-$$
      DezenaOrdemMacho 1 2
      # Exibindo o resultado:
      MostraResultado ;;
#-------------------------------------------------------------------------------------
      -s|--semana)
      case $2 in
         1) echo "domingo" > /tmp/resultado-$$ ;;
         2) echo "segunda-feira" > /tmp/resultado-$$ ;;
         3) echo "terça-feira" > /tmp/resultado-$$ ;;
         4) echo "quarta-feira" > /tmp/resultado-$$ ;;
         5) echo "quinta-feira" > /tmp/resultado-$$ ;;
         6) echo "sexta-feira" > /tmp/resultado-$$ ;;
         7) echo "sábado" > /tmp/resultado-$$ ;;
         *) echo "ERRO [ $2 ] UMA SEMANA SÓ TEM 7 DIAS (1-7)" > /tmp/resultado-$$ ;;
      esac 
      # Exibindo o resultado:
      MostraResultado ;;
   esac
#-------------------------------------------------------------------------------------
# Faz a fila de opções andar dois passos, pois cada opção necessita de seu parâmetro que deve ser processado juntamento com a opção chamada.
shift 2
done

#-------------------------------------------------------------------------------------
# Removendo os arquivos temporários:
RemoveTemporarios

Scripts recomendados

Jogo campo minado em Shell Script

Propriedades do computador

Xqemu! Uma interface gráfica simples para o qemu.

Administração do proFTPD

CGI + Shell


  

Comentários
[1] Comentário enviado por daemonio em 22/05/2012 - 13:17h

Muito bom mesmo! Parabéns.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts