2014-09-23 4 views
0

У меня есть файл, который имеет список маршрутов для .sh-файлов, но для выполнения скриптов требуется дата, это файл, который содержит дату YYYYMMD. Когда я запускаю скрипт, который выполняет список скриптов, я запрашиваю у пользователя дату с помощью команды read.Разрешить только номера из стандартного ввода (команда чтения)

Моя проблема в том, что мне нужно быть на 100% уверенным, что дата ввода пользователя - это как минимум все номера, как я могу это сделать? Я уже убедился, что введенные максимальные символы равны 8, поэтому мне нужно только разрешить пользователю вводить числа. Это все, что у меня есть до сих пор.

echo 'Input date (YYYYMMDD)' 
read -n 8 date 

Любые идеи?

Thankyou.

ответ

0

После того, как помощь от @Thomas я решить мою проблему. Решение состоит в том, чтобы сравнить входной вариант с регулярным выражением. Но по какой-то причине это прямо не работает, поэтому я сохранил регулярное выражение в переменной, а затем сравнил переменные.

reg='^[0-9]{8}$' 
while [[ ! $number =~ $reg ]] 
do 
echo 'The format is wrong' 
done 

^< - Начало линии

[0-9] {8} < - 8 чисел от 0 до 9

< $ - Конец линии

= ~ < - сравнение с регулярным выражением

Надежда этот ответ помог!

Thankyou

PS: Если кто-нибудь знает, почему сравнение не работает, если делать это непосредственно, пожалуйста, дайте мне знать.

1

Вы должны использовать время цикла:

number="" 
while [[ ! $number =~ ^[0-9]{8} ]]; do 
    echo Please enter your age 
    read number 
done 

Где ^[0-9]{8} означает "8 числа от 0 до 9"

+0

Ummm, это не работает, дает мне синтаксическую ошибку, я уже пытался это сделать, я пробовал 'while [[$ number! = [0-9] {8}]]' – Juanpe

+0

@GaryPerry, который ошибка ? –

+0

'строка 50: синтаксическая ошибка в строке 52: ~ (E)^[0-9] {8}]]' – Juanpe