recuperar números com 0 para um único valor int

0

No meu script, preciso de um 0 para números < = 9. Quando o usuário digita qualquer número, eu adiciono 5 a ele e se o resultado for menor que 9, eu preciso imprimir um 0 para ter um número de 2 dígitos (como 07,08,09 etc.).

Eu escrevi uma função para isso, mas o script continua retornando pelo mesmo número "0?" repetidamente em um loop.

Meu script:

echo "Hora: "

read hora

Hora=$((hora+05))

Change () {
if [ $Hora -le 9 ]; then sed -e 's/^/0'$Hora'/'; return $Hora; fi
}

Change

echo -e "$Hora"

output:

~$ bash test.sh
Hora:
4

09

09

09

09

09
    
por Orafla 07.06.2016 / 18:11

1 resposta

1

Existem muitos problemas com o seu script, mas o principal é que você não está dando nenhuma entrada para o comando sed . Se você acabou de executar sed 's/foo/bar/' , então sed esperará a entrada de stdin e continuará para executar cada vez que você pressionar Enter . Como ele não recebe nenhuma entrada, mas uma nova linha de você (quando você pressiona Enter , você está enviando uma linha em branco que é apenas um caractere \n ), ele aplicará o script a essa entrada. Aqui, você está dizendo para adicionar um 0$Hora ao início da linha e é isso que ele faz.

Existem outros problemas no seu código. Por um lado, você não precisa return() nada desde que você está trabalhando em uma variável global. De fato, você não precisa nem mesmo de sed , você pode simplesmente concatenar no próprio shell. Aqui está uma versão funcional do seu script:

## It is good practice to have the functions at the beginning
## of your script.
Change () {
        if [ $Hora -le 9 ]; then
                Hora="0$Hora"
        fi
}

echo "Hora: "
read hora

Hora=$((hora+05))

Change

printf ":$Hora"

Note que no caso simples que você mostra, usar uma função é inútil. As funções são geralmente usadas para repetir uma operação várias vezes em diferentes pontos do script. Se tudo que você precisa fazer é imprimir um 0 se o número for menor que 10, você pode usar apenas printf :

printf "Hora: "
read Hora
printf '%0.2d' "$Hora"

Por fim, convém adicionar alguns testes para garantir que seus usuários forneçam informações válidas. Veja Como faço para testar se uma variável É um número no Bash?

    
por 07.06.2016 / 18:47