Pense em como o seu processo de raciocínio funciona para traduzir do formulário de dígitos para o formato de prosa. O que você olha primeiro? O que você faz com essa informação? Existe um padrão para o seu fluxo de trabalho que você poderia expressar de forma processual? Como isso pode ser dividido em etapas pequenas e discretas que são análogas aos comandos disponíveis para você?
A linha de pensamento acima é a quintessência da programação e dos scripts.
Um você tem o esqueleto do processo em mente, coloque-o em "pseudocódigo" - palavras que fazem sentido para você, se não para o shell - e passe por esse processo, para ter certeza de fazer o que você < em> quer em vez de apenas o que você diz . Então traduza isso da sua língua nativa para comandos de shell.
Por exemplo, um bom ponto de partida pode ser determinar quantos valores de local você precisa indicar. Há algumas maneiras de fazer isso que vêm imediatamente à mente: "quantos dígitos nós temos", ou "é o número maior que 99? Maior que 9?" Ou você pode até trabalhar em um sistema que não precisa de você para resolver isso primeiro.
Neste caso, a primeira coisa que você precisa é a capacidade de fazer algumas aritméticas básicas no shell e testes comparativos. Então:
Digamos que lemos o número em uma variável, number
, e verificamos a sanidade para garantir que o usuário não inseriu -53
ou 3.14
ou albatross
ou algo que estamos não querendo realmente analisar. Podemos começar com:
output=""
if [[ "$number" -gt 100 ]]; then
# okay, we know $number is greater than 100
hundreds=$((number/100))
case $hundreds in
1) output="one" ;;
2) output="two" ;;
3) output="three" ;;
# et cetera
esac
number=$((number-100*hundreds))
fi
output="$output hundred"
E você pode construir a partir daí.