2015-01-22 4 views
0

У меня есть сценарий, который должен принять в качестве входных данных метки времени в формате:Bash - шаблон согласование аргумента против формата метки времени

YYYY-mm-dd HH:mi:ss 

Я использую следующий для проверки, если вход соответствует к образец:

if [[ "$1" == "-r" && "$2" == '[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}' ]] 

Если он не соответствует шаблону, он должен выдать ошибку. Я включил протоколирование Баша, и передал следующее в качестве входных данных:

./meta_script_test.sh -r '2014-01-01 00:00:00' 

Журнал, который генерируется bash -x декларации показывает, что это:

[[ 2014-01-01 00:00:00 == \[\0\-\9\]\{\4\}\-\[\0\-\9\]\{\2\}\-\[\0\-\9\]\{\2\}\ \[\0\-\9\]\{\2\}\:\[\0\-\9\]\{\2\}\:\[\0\-\9\]\{\2\} ]] 
+ usage 'Timestamp is in an improper format. Please enter it as: YYYY-mm-dd 00:00:00, and try again' 
+ cat 
    Usage: ./meta_script_test.sh -r 'timestamp' 

    -r for reset is used to manually pass a date in timestamp format in case of data corruption for creating the delta table. 

    Example: ./meta_script_test.sh -r '2014-01-01 00:00:00' 

Я пробовал различные комбинации, если заявление, как:

if [[ "$1" == "-r" && "$2" == '\[0-9]{4}-\[0-9]{2}-\[0-9]{2} \[0-9]{2}:\[0-9]{2}:\[0-9]{2}' ]] 

И

if [[ "$1" == "-r" && "$2" == '\(d){4}-\(d){2}-\(d){2} \(d){2}:\(d){2}:\(d){2}' ]] 

Ничто не работает. Не могли бы вы указать мне правильное регулярное выражение для правильного соответствия параметра методу timestamp? Благодаря!

+0

'==' тесты против шаблонов шаблонов файлов. Используйте '= ~' для проверки на regexp. – Barmar

+0

@ Бармар: Я тоже это сделал. Без изменений. – CodingInCircles

ответ

2

Используйте команду =~, чтобы выполнить регулярное выражение. == предназначен для точных совпадений или соответствия шаблону глобирования файла. Регулярное выражение не должно указываться; поскольку ваше регулярное выражение содержит пробел, вам нужно убежать или процитировать этот символ.

if [[ "$1" == "-r" && "$2" =~ [0-9]{4}-[0-9]{2}-[0-9]{2}\ [0-9]{2}:[0-9]{2}:[0-9]{2} ]] 
+0

Теперь я получаю: '+ [[2014-01-01 00:00:00 = ~ \ [0-9] \ {4} - \ [0-9] \ {2} - \ [0-9] \ {2} \ [0-9] \ {2}: \ [0-9] \ {2}: \ [0-9] \ {2}]] + использование 'Временная метка находится в неправильном формате. Пожалуйста, введите его как: ГГГГ-мм-дд 00:00:00 и повторите попытку ' + cat Использование: ./meta_script_test.sh -r' timestamp ' -r для сброса используется для ручной передачи даты в формат timestamp в случае повреждения данных для создания таблицы дельты. ' Пример: ./meta_script_test.sh -r '2014-01-01 00:00:00' – CodingInCircles

+0

Вы спасатель жизни! Я потратил около 2 часов, пытаясь понять, что, черт возьми, с ним не так! Спасибо огромное! :) – CodingInCircles

Смежные вопросы