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