Ich schreibe dieses Skript, das nach dem Smart-Test einen Fehler erkennen soll. Aber ich kann nicht erkennen, dass es einen Fehler gibt, oder natürlich nicht.Bash: Komplexer Befehl in if-Anweisung
if [[ smartctl --log=selftest /dev/sda | awk 'NR>7 {print $4,$5,$6,$7}' | sed 's/offline//g; s/00%//g' != *"Completed without error"* ]; then
echo "No error detected"
else echo "Error detected"
fi
Ausgang:
./test.sh: line 19: conditional binary operator expected
./test.sh: line 19: syntax error near `--log=selftest'
./test.sh: line 19: `if [[ smartctl --log=selftest /dev/sda | awk 'NR>7 {print $4,$5,$6,$7}' | sed 's/offline//g; s/00%//g' != *"Completed without error"* ]]; then'
So offensichtlich etwas falsch ich tue. Aber alle Tutorials sagen zwei [[]]
Dinger, aber ich denke, der Befehl ist ziemlich komplex, es funktioniert nicht ... Wie kann ich es zum Laufen bringen?
'[[]]' ist ein spezifischer Befehl, nicht Teil der allgemeinen 'if'-Syntax. Wenn Sie diesen Befehl nicht ausführen möchten, fügen Sie ihn nicht in Ihre Syntax ein. –
Stattdessen müssen Sie die von der Pipeline ausgegebene Zeichenfolge erfassen, um sie mit dem angegebenen Muster zu vergleichen. – chepner
Entfernen der '[[]]' Ich bekomme 'sed: kann nicht lesen! =: Keine solche Datei oder Verzeichnis sed: kann nicht lesen * Fertig ohne Fehler *: Keine solche Datei oder Verzeichnis' – Florius