Ich bin auf den Fehler gestoßen, den ich von einem Skript bekomme, das ich ausführen möchte, um meinen Rechner auszusetzen. Ich versuche, eine Regex in einer Elif-Anweisung zu verwenden, um meine Maschine nach einer bestimmten Zeit zu unterbrechen.bash Regulärer Ausdruck in if-Anweisung
#!/bin/bash
echo "When would you like to suspend the machine?"
read "sustime"
if [ "$sustime" = "now" ]
then
sudo pm-suspend
elif [[ "$sustime" =~ [0-9]*[smhd] ]]
then
time=`expr "$sustime" : '\([0-9]+)\)'`
ttype=`expr "$sustime" : '.*\([smhd]\)'`
sudo sleep $time$ttype ; sudo pm-suspend
else
echo "Please enter either [now] or [#s|m|h|d]"
fi
Der Code funktioniert nicht auf der elif
Linie, zum Beispiel, wenn ich Eingang 5s, die Ausgabe des Skripts ist:
$ sh dbussuspend.sh
When would you like to suspend the machine?
5s
dbussuspend.sh: 10: dbussuspend.sh: [[: not found
Please enter either [now] or [#s|m|h|d]
Es sollte jedoch gelesen, dass ich eingegeben habe die String 5s
Führen Sie den Codeblock unter elif
. Ich habe tatsächlich jeden Regex anstelle von [0-9]*[smhd]
versucht, alle mit dem gleichen Fehler.
Randbemerkung: Sie wahrscheinlich wollen Sie [0-9] + [smhd] 'sonst wird' h' eine akzeptable Eingabe sein. – Laurel
Sie brauchen 'expr' nicht; Sie können Capture-Gruppen im ursprünglichen regulären Ausdruck verwenden und dann auf die erfassten Werte aus dem Array "BASH_REMATCH" zugreifen. – chepner