Warum beendet
(echo "Fehler" && exit 1)
dein Skript nicht?
Mit "(" und ")" startest Du eine neue Subshell und das "exit 1" beendet diese Subshell. Einfacher Test: Öffne eine Terminal und schreibe einmal
echo "Fehler" && exit 1
und einmal
(echo "Fehler" && exit 1)
in die Kommandozeile. Im ersten Fall beendet sich das aufrufende Programm und Dein Terminal geht zu. Im zweiten Fall siehst Du nur die Ausgabe "Fehler" aber Dein Terminalprogramm bleibt offen.
Ich würde das völlig anders machen:
errhandler()
{
echo "Fehler"
exit 1
}
systemctl status service || errhandler