我的目标是validation$ FILE是否是一个备份文件(备份文件以xxxx.xx.xx.xx数字结尾
备份文件的例子
ls /etc/VRTSvcs/conf/config main.cf.17Dec2012.09.10.14 main.cf.17Dec2012.09.10.23 main.cf.17Dec2012.09.10.31
没有备份文件的例子
main.cf
我写下面的ksh脚本行来validation$ FILE是否以xxxx.xx.xx.xx数字结尾
。
[[ ` echo $FILE | grep -v '[0-9]\{4\}\.[0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{2\}' ` -eq 0 ]] && echo Not Backup file
我设定了
FILE="main.cf.17Dec2012.09.10.31"
我在Solaris / Linux上运行这一行,但是我得到了“不备份文件”,尽pipe$ FILE以2012.09.10.31结束
请build议什么问题与我的ksh行(需要修复)以匹配数字 – xxxx.xx.xx.xx
只要删除“-eq 0”
[[ ` echo $FILE | grep -v '[0-9]\{4\}\.[0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{2\}' ` ]] && echo Not Backup file
内联命令replace返回命令的输出,而不是返回码
` echo $FILE | grep -v '[0-9]\{4\}\.[0-9]\{2\}\.[0-9]\{2\}\.[0-9]\{2\}' `
会返回一个空string,而不是一个零。 因此,这个上线不会按预期工作。
为什么我们不能在BASH / KSH中使用内build的Regexp呢? FILE1是你的backfile名字
[[ "$FILE1" =~ [0-9]{4}\.[0-9]{2}\.[0-9]{2}\.1[0-9]{2} ]] || echo "Not a backup file"
该零的时间/ CPU利用率。 无需你使用三个命令, echo两次, grep一次。