2017-09-14 4 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 

In dem obigen Skript, TXT-Dateien mit dem aktuellen Datum überprüft. Wenn der Datumsstempel übereinstimmt, gibt es SUCCESS sonst FAILURE zurück.shell scripting BASH

Hier funktioniert es für mich außer es gibt Bedingung für alle Dateien zurück. Ich brauche nur eine Bedingung zurückzugeben: entweder ERFOLG oder FAILURE.

Wenn eine der Dateien nicht mit dem aktuellen Datumsstempel übereinstimmt, sollte eine Fehlerbedingung zurückgegeben werden. Wenn alle Übereinstimmungen vorhanden sind, sollte nur eine SUCCESS-Bedingung zurückgegeben werden.

+1

Führen Sie ein Flag namens DATE_FAIL ein und setzen Sie es bei jedem Eintrag Ihres else-Zweigs auf 1 und beenden Sie es früh. Überprüfen Sie dieses Flag beim Verlassen der Schleife. – jdv

+0

Siehe auch: https://Stackoverflow.com/q/2237080/1531971 und https://Stackoverflow.com/q/18488651/1531971 – jdv

+1

Bitte versuchen Sie und verbessern Sie Ihren Titel, im Moment ist es sehr vage. –

Antwort

0

Lasst uns einen völlig anderen Ansatz versuchen:

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

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

Wenn Dateien gefunden werden, die vor mehr als einem Tag geändert wurden, dann Setzen Sie den Status auf "FAILURE". Drucken Sie den Status mit dem Standardwert "Erfolg". grep -q . gibt "Erfolg" zurück und wird beendet, sobald es eine Eingabe erhält.

Probleme in Ihrem bestehenden Ansatz wurden bereits an anderer Stelle hervorgehoben - wenn Sie innerhalb der Schleife ausgeben, dann werden Sie mit einer Zeile pro Datei enden.

+0

Danke Tom !! .. Einfach und mächtig .... Da ich Anfänger bin, arbeitet normalerweise mit "dann" und "sonst" in if-Anweisung .. Hier, kein "sonst", etwas neues zu mir verstehe .. Wie ist der Druck Standard "Erfolg"? Wie bekomme ich .txt-Dateien im Display für Fehler ..? –

+0

@ Manoj.V Die Parametererweiterung verwendet ': -Success', um einen Standardwert anzugeben. Sie können die Pipe zu grep entfernen, wenn Sie die gefundenen Dateien sehen möchten. –

+0

Ich benutze Funktion für INFO, ERR & CRITICAL ... Funktionsname ist 'Protokoll' .. und die Verwendung ist "Log-Info", "Log-Err". Hier, wenn der Erfolg zurückkehrt, sollte ich "log info" und "log err" für den Fehler verwenden. Wie integriere ich die Funktion in die von Ihnen vorgeschlagene Methode? –

1

Setzen Sie eine Variable vor der Schleife. Wenn Sie einen Fehler finden, ändern Sie die Variable und beenden Sie die Schleife.

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

Sie benötigen Ergebnis vorherige Datei speichern

#!/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