2017-09-14 171 views
1
#!/bin/bash 
mdate="$(date | awk '{print $2$3}')"; 
cd /var/tmp/precheck; 
found="$(ls -l *.txt | awk '{print $6$7}')" 
for txtdate in $found 
do 
if [ $mdate = $txtdate ]; then 
echo "Pre-Check Success" 
else 
echo "Pre-Check FAILURE" 
fi 
done 

在上面的脚本中,.txt文件使用当前日期进行验证。如果日期标记匹配,则返回“成功否则失败”。shell脚本BASH

这里,它适用于我,但它为所有文件返回条件。我只需要返回一个条件:成功或失败。

如果任何一个文件与当前日期戳不匹配,它应该返回一个失败条件。如果全部匹配,它应该只返回一个SUCCESS条件。

+1

引入一个名为DATE_FAIL的标志,并在您的其他分支的任何条目设置为1并提前退出。退出循环后检查此标志。 – jdv

+0

另请参阅:https://stackoverflow.com/q/2237080/1531971和https://stackoverflow.com/q/18488651/1531971 – jdv

+1

请尝试改进您的标题,此刻它非常含糊。 –

回答

0

让我们尝试一种完全不同的方法:

if find /var/tmp/precheck -name '*.txt' -mtime +0 | grep -q .; then 
    status="FAILURE" 
fi 

printf 'Pre-Check %s\n' "${status:-Success}" 

如果发现任何文件都超过一天前修改,然后将状态设置为“失败”。打印状态,默认为“成功”。 grep -q .返回“成功”,并在收到任何输入后立即退出。

您现有方法中的问题已在其他地方突出显示 - 如果您在循环内输出,则最终每个文件只有一行。

+0

谢谢汤姆!! ..简单而强大.... 因为我是初学者,通常在if语句中使用“then”和“else”..在这里,没有“else”,对我来说是新东西了解..它的印刷如何默认“成功”? 另外,如何获取.txt文件在显示器中显示失败的文件..? –

+0

@ Manoj.V参数扩展使用':-Success'来提供默认值。如果要查看找到的文件,可以将管道删除为grep。 –

+0

我正在使用函数INFO,ERR&CRITICAL ... 函数名称是'log',用法是“log info”,“log err”。 在这里,如果成功返回,我应该使用“log info”和“log err”作为失败。 如何在您建议的方法中集成函数? –

1

在循环之前设置变量,然后如果发现故障更改变量并退出循环。

status=Success 
for txtdate in $found 
do 
    if [ $mdate != $txtdate ]; then 
     status=FAILURE 
     break 
    fi 
done 
echo Pre-Check $status 
0

您需要存储一个文件结果

#!/bin/bash 
mdate="$(date | awk '{print $2$3}')"; 
cd /var/tmp/precheck; 
found="$(ls -l *.txt | awk '{print $6$7}')" 
result="SUCCESS" 
for txtdate in $found 
do 
if [ $mdate != $txtdate ]; then 
result="FAILURE" 
fi 
done 
echo "Pre-Check " $result