首先,我是一个Windows的人,但是现在我正在接受Linux的任务。我使用incrontab来监视Oracle服务器上的一个目录。
我试图修改它,以便如果它看到文件F078311,它将回显测试到日志文件。否则,它将检查该文件是否与第二种格式匹配,并执行该回波。
它正在运行第二个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" 发布于 2016-10-17 21:32:57
在这种情况下,不需要正则表达式,使用basename计算不带路径的精确文件名,然后检查是否相等。
[[ $(basename $1) = F073811 ]] && echo Test >> /logs/joblog.log注意:我刚刚注意到,您的命令行只在Bash 4中适用于Bash 3,而不是在Bash 3中工作,而且不涉及正则表达式,而且它将与/export/XXXXF073811不匹配,而您的正则表达式则不匹配。
我越多地想到这一点,我就越确信问题很可能是以/export/F073811\r作为第一个参数来调用您(在Linux上非常频繁地出现MS行终止字符)。
https://stackoverflow.com/questions/40095673
复制相似问题