Como usar switch case no meu caso?

0

Minha definição de problema é: 1.Escreva um dTOe de script de shell Bourn que tome como entrada qualquer número entre 0 e 999 e imprima o valor em inglês para este número. Eu estou lutando com problema acima. Você poderia me dar alguma sugestão ou ajuda?

#! /bin/bash

number=$1

if [ $number -lt  0 -o $number -gt 999 ]
then
    echo put the right input between 0 and 999
fi

case "$number"
    [0-9]) 
    
por GideokSeong 22.05.2018 / 20:45

2 respostas

1

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í.

    
por 22.05.2018 / 21:25
0
echo -n "Enter number : "
read num

length=$(echo $num | wc -c)
length=$(( $length - 1 ))

echo "Your number $num in words : "
for (( i=1; i<=$length; i++ ))
do
   # get one digit at a time
    digit=$(echo $num | cut -c $i)
   # use case control structure to find digit equivalent in words 
    case $digit in
       0) echo -n "zero " ;;
       1) echo -n "one " ;;
       2) echo -n "two " ;;
       3) echo -n "three " ;;
       4) echo -n "four " ;;
       5) echo -n "five " ;;
       6) echo -n "six " ;;
       7) echo -n "seven " ;;
       8) echo -n "eight " ;;
       9) echo -n "nine " ;;
  esac 
done

 # just print new line
echo ""
    
por 22.05.2018 / 22:34