2017-02-09 4 views
0

Aus irgendeinem Grund meine if condition für eine Datei und ein Verzeichnis nicht vorhanden ist nicht korrekt verarbeitet. Das Skript denkt, dass die Datei und das Verzeichnis existieren, wenn sie nicht existieren.Bash-Skript überprüft nicht ordnungsgemäß, ob Verzeichnis und Datei existieren

#!/usr/bin/bash 
lockdir=/opt/someOtherDis/qa_test_lock 
puppetlock=/var/opt/puppetLockDirs/agent_catalog_run.lock 

if [ ! -f "$puppetlock" ] && [ ! -d "$lockdir"]; then 
    #Get a url and grep it to get stuff 
else 
    su -c "echo ls puppetlock results: $(ls -lrt $puppetlock) and qa lock results: $(ls -lrt $lockdir) >> /var/log/dirStuff/test-qa-run.log" -m "someUser" 
    su -c "echo $(date +\"%m-%d-%T\") Puppet or QA tests are running. Did not attempt to update artifact version. >> /var/log/dirStuff/test-qa-run.log" -m "someUser" 
fi 

Ich habe den Ausgang des ls sicherzustellen, dass ich sehen kann, wenn Puppe oder die qa Sperre existiert.

Hier ist die Ausgabe der Protokolldatei, erste Überprüfung war, wenn ich Marionette manuell ausführen, damit ich sicherstellen konnte, dass die Dinge funktionierten.

02-09-08: 16: 01 Puppet- oder QA-Tests werden ausgeführt. Versuch nicht, Artefaktversion zu aktualisieren. ls puppetlock Ergebnisse: rw-r - r-- 1 root root 5 Feb 9 8.27 /var/opt/lib/pe-puppet/state/agent_catalog_run.lock und qa Verriegelungs Ergebnisse:

02 -09-08: 28: 01 Marionetten- oder QS-Tests laufen. Hat nicht versucht, die Artefaktversion zu aktualisieren.

02-09-08: 30: und qa Sperre Ergebnisse:

02-09-08: 30: 02 Puppet 02 app_versions.json wurde in den letzten 30 Minuten ls puppetlock Ergebnisse nicht geändert oder QA Tests laufen. Es wurde nicht versucht, die Artefaktversion zu aktualisieren. ls Puppetlock Ergebnisse: und qa Sperre Ergebnisse:

02-09-08: 32: 01 Puppet oder QA Tests laufen. Es wurde nicht versucht, die Artefaktversion zu aktualisieren.

+4

Es sollte ein Leerzeichen zwischen '" $ Lockdir "' und ']', nein? – AlexP

+0

@AlexP Sie haben Recht. Kein Wunder, dass ich es nicht sehen konnte. Problem ist behoben – wiredniko

Antwort

1

Hmm, scheint, wie Sie schreiben gemeint:

if [ ! -f "$puppetlock" ] || [ ! -d "$lockdir" ]; then 

Welche (IMO) ist deutlicher geschrieben:

if ! test -f "$puppetlock" -a -d "$lockdir"; then 

oder

if ! { test -f "$puppetlock" && test -d "$lockdir"; } then 

(Beachten Sie, dass !a || !b entspricht !(a && b), aber nicht die sa Ich als !a && !b)

Verwandte Themen