2016-10-17 155 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