shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] É um número?


From: Vinicius Costa Carvalho
Subject: Re: [shell-script] É um número?
Date: Tue, 20 Nov 2018 13:50:27 -0200

Fala Robson, beleza?

Mestre, dessa forma é outra categoria!
Muito obrigado pelas dicas.

Abraços,

On Tue, Nov 20, 2018 at 5:16 AM Robson Alexandre address@hidden [shell-script] <address@hidden> wrote:
 

E aí Vinícius,

Acredito que sua lógica está correta, porém poderia ser simplificada retirando todos os dígitos usando ${var//[0-9]/} e testando se a string é nula com a opção -z do test, por exemplo:

#!/bin/bash
function is_numeric() {
  [[ -z ${1//[0-9]/} ]]
  return $?
}

is_numeric 12345 && echo "$_ É Numérico"
is_numeric '987kajsd123' || echo "$_ Não é numérico"
is_numeric "1234   " || echo "$_ Não é numérico"
Isso considerando "números" como apenas positivos inteiros.
Caso queira incrementar melhor seu teste para verificar negativos e decimais, poderia incluir o sinal de menos (-) e considerar o uso de ponto flutuante usando regex,

function is_numeric() {
  [[ $1 =~ ^-?[0-9]+[,.]?[0-9]+$ ]]
  return $?
}

is_numeric -123,45 && echo "$_ É Numérico"
is_numeric '987.kajsd123' || echo "$_ Não é numérico"
is_numeric "1234.00   " || echo "$_ Não é numérico"


Atenciosamente
Robson Alexandre


Em seg, 19 de nov de 2018 às 19:49, Vinicius Costa Carvalho address@hidden [shell-script] <address@hidden> escreveu:
 

Boa Tarde Mestres Cerv... ops... Shelleiros! :-D

Estou com uma dúvida, e gostaria da ajuda dos senhores, se possível.
Quero testar se o conteúdo de uma variável é um número..... pesquisando
no google, achei muitas formulas malucas. Procurei também no man test,
e não achei nada simples (como uma opção -e por exemplo).

Cheguei em uma solução propria, e gostaria de ver se temos opções
melhores. Segue o teste longo que acabei fazendo...

###########################################################
#!/bin/bash

read -p "Insira o valor: " STRING

vt=$(wc -m <<<${STRING})
vc=$(wc -m <<<${STRING//[!0-9]/})

[[ $vt -eq $vc ]] && echo "Eh um numero" || echo "Eh uma string"
###########################################################

Desde já agradeço,

Abraços,

--
Vinicius Costa Carvalho

"Se enxerguei mais longe, foi porque me apoiei sobre os ombros de gigantes."
Isaac Newton



--
Vinicius Costa Carvalho

"Se enxerguei mais longe, foi porque me apoiei sobre os ombros de gigantes."
Isaac Newton

reply via email to

[Prev in Thread] Current Thread [Next in Thread]