
Ich versuche also herauszufinden, ob die Maschine eine Batterie hat, und führe dann je nachdem, ob sie eine hat oder nicht, unterschiedliche Befehle aus. Das habe ich bisher herausgefunden:
upower -d >> /tmp/batstat
if [ grep -F BAT0 /tmp/batstat ]; then
echo "BAT0 PRESENT" >> /tmp/batstat
else
echo "NO BAT0" >> /tmp/batstat
fi
Dies gibt jedoch den Fehler „bash: [: zu viele Argumente“ zurück, während wie erwartet KEIN BAT0 in /tmp/batstat geschrieben wird. Das Ausführen nur des grep funktioniert ordnungsgemäß, daher verstehe ich nicht, warum es als if-Bedingung nicht funktioniert.
Wenn es eine bessere Möglichkeit gibt, eine Batterie zu überprüfen, bin ich dafür hundertprozentig offen.
Antwort1
if upower -d | grep -qF BAT0 ; then
echo "BAT0 PRESENT"
else
echo "NO BAT0"
fi
if
nimmt eine Reihe von Befehlen entgegen und arbeitet am Status des letzten Befehls. In diesem Fall gibt grep „ grep
true“ zurück, wenn eine Übereinstimmung vorliegt, andernfalls „false“.
Antwort2
grep -F BAT0 /tmp/batstat
ist in keiner Weise ein BEDINGTER AUSDRUCK (wie im Handbuch beschrieben) für das test
eingebaute von bash
. Da die Ausgabe von grep
nicht verwendet wird, -q
reicht die Option und das Verlassen auf den Exit-Code wahrscheinlich aus.
grep -F -q BAT0 batstat
if [[ $? -eq 0 ]]; then
echo yea
else
echo nay
fi
Außerdem /tmp/batstat
ist es wahrscheinlich eine sehr schlechte Wahl, insbesondere wenn ein böswilliger lokaler Benutzer Zugriff hat. Erwägen Sie stattdessen die Verwendung vonmktemp(1)
, oder die Datei wird nicht unter gefunden /tmp
.