2016-10-17 2 views
1

Прежде всего, я парень Windows, но теперь мне поручено работать с Linux. Я использую incrontab для просмотра каталога на сервере Oracle Linux.Incrontab не обрабатывает оператор IF

Я пытаюсь изменить его так, что если он увидит файл F078311, он будет эхо-тест в файл журнала. В противном случае он проверяет, соответствует ли файл второму формату и выполняет это эхо.

Он запускает второй IF и эхосигнал даты в журнал, но не повторяет тест в журнал. Что-то не так с моим синтаксисом?

Это просмотр /export. и $1 будет /export/F073811

incrontab -l 
/export IN_MODIFY,IN_CLOSE_WRITE,IN_MOVED_TO /usr/local/scripts/EXPrename.sh [email protected]/$# 

Shell скрипт:

#!/bin/bash 
# This file is invoked using incron and will rename the file with the current date. 

# Set newdate as current date, YYYYMMDD-HHMMSS 
newdate="$(date +%Y%m%d-%H%M%S)" 

#Sets the filename as the filename_YYYYMMDD-HHMMSS 
filename="A$newdate.txt" 

joblog="/logs/joblog.log" 


[[ ($1 =~ F073811$) ]] && echo Test >> /logs/joblog.log 

#checks to file format to see if it looks like name_YYYYMMDD-HHMMSS. If it does not then it renames the file to that format. 
[[ ! ($1 =~ A[0-9]{8}-[0-9]{6}\.txt$) ]] && echo ---- `date` ------ >> "$joblog" 
+0

можете ли вы напечатать '$ 1'? –

+0

'/ export/F073811' – Travis

ответ

2

В этом случае нет необходимости в регулярном выражении, используйте basename, чтобы вычислить точное имя файла без пути, то просто проверить равенство

[[ $(basename $1) = F073811 ]] && echo Test >> /logs/joblog.log 

Примечание: Я только заметил, что ваша командная строка работает для меня как есть, но не в Bash 3, только в Bash 4. Вышеуказанный метод работает для обоих и не делает включают регулярные выражения, плюс это не будет соответствовать /export/XXXXF073811, тогда как ваше регулярное выражение будет.

Чем больше я думаю об этом, тем больше я уверен, что эта проблема может быть очень хорошо, что вы призваны с /export/F073811\r в качестве первого аргумента (MS-DOS линии прекращения голец поскользнулся в, очень часто на Linux)

+0

Я был на пути к использованию идеи basename, но отвлекся и ушел по другой касательной. Имя файла никогда не изменится и всегда будет F078311, так что это сработало. Благодарю. – Travis

+0

Хорошо, но по-прежнему существует тайна о регулярных выражениях, поскольку она должна работать. Вы используете bash 3? и вы уверены, что ваше второе регулярное выражение работает (если первый не работает, почему второй будет?) условие отрицательное, поэтому, если оно не выполняется, он будет выполнять эхо в журнале каждый раз. –

+0

GNU bash, версия 4.1.2 (1) -release (x86_64-redhat-linux-gnu) – Travis

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