Shell-Backup-Skript, `]` fehlt

Shell-Backup-Skript, `]` fehlt

Ich stelle ein einfaches Backup-Skript zusammen, das den Inhalt eines Ordners tarnt und die Datei dann auf einen Backup-Server verschiebt. Das Skript stellt sicher, dass die Tar-Datei existiert und nicht null Bytes groß ist, bevor es verschoben wird.

Das Problem ist, dass das Skript in einer der IF-Zeilen abstürzt.

if [ -f /www/archives/pdf/pdf_201207021048.tar && 11294720 -gt 0 ]; then
    echo "tar file exists and is greater than 0 bytes."
else
    echo "tar file does not exist or is zero bytes"
fi

Der Fehler in der Konsole ist:

./backup_pdf.sh: line 49: [: missing `]'

Zeile 49 ist die obige if-Anweisung.

Das Skript wurde erfolgreich verifiziert mit

sh -n backup.sh

Was ist falsch daran, dass shein „]“ fehlt, die Syntaxprüfung jedoch trotzdem bestanden wird?

Antwort1

Das Problem besteht darin, dass &&kein gültiger Operator für ist . Stattdessen [wird oder benötigt .-a[ condition ] && [ other_condition ]

&&ist einSeparator(wie ;, ||, &und \n) in einer POSIX-Shell. Es sieht die Anweisung [ -f www/archives/pdf/pdf_201207021048.tar; die Anweisung endet, weil ein vorkommt &&, dann kommt eine weitere Anweisung (die ebenfalls einen Fehler verursachen würde, wenn sie dort ankäme), die wie aussieht 11294720 -gt 0 ], und diese Anweisung wird mit beendet ;.

verwandte Informationen