Incrontab不处理IF语句

时间:2016-10-17 21:07:40

标签: regex linux shell

首先,我是一名Windows用户,但现在正在接受Linux的任务。我正在使用incrontab来查看Oracle Linux服务器上的目录。

我正在尝试修改它,以便如果它看到文件F078311,它将回显Test到日志文件。否则,它将检查文件是否与第二种格式匹配并执行该回显。

正在运行第二个IF并将日期回显到日志,但是没有将测试回显到日志。我的语法有问题吗?

正在观看/export目录。 $1将是/export/F073811

incrontab -l
/export IN_MODIFY,IN_CLOSE_WRITE,IN_MOVED_TO /usr/local/scripts/EXPrename.sh $@/$#

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" 

1 个答案:

答案 0 :(得分:2)

在这种情况下,不需要正则表达式,使用basename计算没有路径的确切文件名,然后检查是否相等

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

注意:我刚注意到你的命令行按原样运行,但在Bash 3中没有,只在Bash 4中运行。上述方法适用于两者并且不涉及正则表达式,而且它不匹配{ {1}}而你的正则表达式会。

我越想到它越多我肯定问题很可能是你用/export/XXXXF073811作为第一个参数调用(MS-DOS行终止字符串在Linux上非常频繁地出现)