Como verificar entradas numéricas no shell do Linux?

0

Eu quero verificar se uma entrada no meu script de shell era um caractere alfabético ou um caractere. como posso conseguir isso?

    
por Luis Veliz 12.12.2016 / 17:59

4 respostas

2

Sua pergunta é muito vaga, então algumas adivinhações aqui:

#!/bin/bash
input=$1
if [[ -z "$input" || $input == *[^[:digit:]]* ]]; then
    echo "your input '$input' is not a number" >&2
    exit 1
fi
echo "congrats, '$input' is a number"

No bash, dentro de [[...]] , o operador == é um operador de correspondência de padrões , então estamos procurando por qualquer caractere não-dígito lá.

    
por 12.12.2016 / 18:13
1

Se sua entrada estiver em $ VAR ....

if [ -z "${VAR//[0-9]/}" -a ! -z "$VAR" ]; then
  echo only has digits
fi 
    
por 12.12.2016 / 18:16
1

A verificação de um caractere alfabético é apenas uma questão de:

case $input in
  ([[:alpha:]]) echo one alpha character;;
  (*) echo 'non-alpha or not one character (or non-character)';;
esac

O caractere é decodificado conforme o conjunto de caracteres / codificação do código do idioma, e o código do idioma é consultado novamente para verificar se está na classe de caracteres alfabética .

Verificar se $input é um caractere é mais complicado.

case $input in
  (?) echo one character
esac

Destina-se a verificar isso. No entanto, com a maioria dos shells, isso também retornará true se $input contiver um byte que não forma um caractere válido. Para explicar o que você poderia fazer:

case $input in
  ([[:alpha:]]) echo one alpha character;;
  (?)
     n_chars=$(($(printf %s "$input" | wc -m)))
     if [ "$n_char" -eq 1 ]; then
       echo one character
     else
       echo one byte that is not a character
     fi;;
  ("") echo empty;;
  (*) echo anything else
esac
    
por 12.12.2016 / 18:56
0

Enquanto as outras respostas são ótimas, aqui está uma solução uma linha

grep -q '^[[:alnum:]]*$' <<< "$mybar" && success_command || failure_command

Se você quiser retornar o comando failure na string vazia, use o seguinte

grep -q '^[[:alnum:]]\+$' <<< "$mybar" && echo "success" || echo "failure"
    
por 13.12.2016 / 10:30