Comando que me limite a exatamente 2 caracteres

1. Comando que me limite a exatamente 2 caracteres

Rodrigo Costa
RodrigoANN

(usa Outra)

Enviado em 05/12/2015 - 00:47h

Olá pessoal, sou iniciante em Linux e estou fazendo um script em que o usuário digita a data, começando pela hora e se o valor digitado for menor que zero ou maior do que 23 ele cai em uma msg de erro.

A minha dúvida é:
Existe algum comando para ser colocado dentro do "if" que permita ao usuário digitar exatamente 2 caracteres? Por exemplo: Se ele digitar 1 ou 4 ou 9 ou 654 ou 10343 cairia em uma mensagem de erro.
APENAS se ele digitar EXATOS 2 caracteres como 01 ou 05 ou 23 e etc. O programa continuaria.

EDITADO: Aqui tem o script completo:


#!/bin/bash

clear;

echo -n "Informe a hora desejada (00-23): "
read hora;

if [ "$hora" -lt 00 ] || [ "$hora" -gt 23 ];

then

echo -e "Você digitou um valor inválido para a hora! "

sleep 2

exit

fi

echo -n "Informe os minutos desejados (00-59): "
read minuto;

if [ "$minuto" -lt 00 ] || [ "$minuto" -gt 59 ];

then

echo -e "Você digitou um valor inválido para os minutos! "

sleep 2

exit

fi

echo -n "Informe o dia desejado (01-31): "
read dia;

if [ "$dia" -lt 01 ] || [ "$dia" -gt 31 ];

then

echo -e "Você digitou um valor inválido para o dia! "

sleep 2

exit

fi

echo -n "Informe o mês desejado (01-12): "
read mes;

if [ "$mes" -lt 01 ] || [ "$mes" -gt 12 ];

then

echo -e "Você digitou um valor inválido para o mês! "

sleep 2

exit

fi

echo -n "Informe o ano desejado (2011-2015): "
read ano;

if [ "$ano" -lt 2011 ] || [ "$ano" -gt 2015 ];

then

echo -e "Você digitou um valor inválido para o ano! "

sleep 2

exit

fi

date $mes$dia$hora$minuto$ano

echo -n "Atualizar o horário da BIOS? s/n? "
read bios;

if [ "$bios" == s ] || [ "$bios" == S ];

then

hwclock --systohc

echo -e "Horário atualizado da máquina: "

sleep 2

exit

elif [ "$bios" == n ] || [ "$bios" == N ];

then

echo -n "Horário atual do sistema: "
date

echo -n "Horário atual da máquina: "
hwclock

sleep 2

exit

else

echo -e "Você digitou uma opção inválida! Digite [s] para sim ou [n] para não "

fi





  


2. Re: Comando que me limite a exatamente 2 caracteres

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 05/12/2015 - 01:05h

Vc pode usar o read:


read -p "Informe a hora desejada (00-23): " -n 2 VALOR


O parâmetro -n 2 vai fazer com que o read espere 2 caracteres serem digitados para seguir adiante e armazená=los na variável VALOR.

Depois vc pode usar uma expressão regular para ter certeza que foram digitados 2 caracteres numéricos, pode até mesmo substituir seu test diretamente pelo egrep, exemplo:


if echo "$VALOR" | egrep -q '^([0-1][0-9]|2[0-4])$'; then
echo "valor entre 00 e 24"
fi



3. Re: Comando que me limite a exatamente 2 caracteres

Rodrigo Costa
RodrigoANN

(usa Outra)

Enviado em 05/12/2015 - 17:03h

rai3mb escreveu:

Vc pode usar o read:


read -p "Informe a hora desejada (00-23): " -n 2 VALOR


O parâmetro -n 2 vai fazer com que o read espere 2 caracteres serem digitados para seguir adiante e armazená=los na variável VALOR.

Depois vc pode usar uma expressão regular para ter certeza que foram digitados 2 caracteres numéricos, pode até mesmo substituir seu test diretamente pelo egrep, exemplo:


if echo "$VALOR" | egrep -q '^([0-1][0-9]|2[0-4])$'; then
echo "valor entre 00 e 24"
fi


Olá rai3mb, muito obrigado pela resposta!

Usei o esquema do read como demonstrado, mas o script deu erro de sintaxe :/ e não consigo solucioná-lo...







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts