Bash-Integer-Vergleich
Ich schreiben möchte ein bash-Skript, das überprüft, ob es mindestens einen parameter und wenn es einer ist, wenn das parameter ist entweder eine 0 oder eine 1.
dies ist das Skript:
#/bin/bash
if (("$#" < 1)) && ( (("$0" != 1)) || (("$0" -ne 0q)) ) ; then
echo this script requires a 1 or 0 as first parameter.
fi
xinput set-prop 12 "Device Enabled" $0
Dieser gibt die folgenden Fehler:
./setTouchpadEnabled: line 2: ((: ./setTouchpadEnabled != 1: syntax error: operand expected (error token is "./setTouchpadEnabled != 1")
./setTouchpadEnabled: line 2: ((: ./setTouchpadEnabled -ne 0q: syntax error: operand expected (error token is "./setTouchpadEnabled -ne 0q")
Was mache ich falsch?
InformationsquelleAutor der Frage Cheiron | 2013-01-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieses Skript funktioniert!
Aber dies funktioniert auch, und zusätzlich hält die Logik der OP, da die Frage über die Berechnungen. Hier ist es mit nur arithmetische Ausdrücke:
Die Ausgabe ist die gleiche1:
[1] der zweite schlägt fehl, wenn das erste argument ist ein string
InformationsquelleAutor der Antwort user000001
Einfachere Lösung;
Ausgabe
Erklärung
(( ))
- Wertet den Ausdruck mit Integer-zahlen.${1:-2}
- Verwendet, parameter expansion, um einen Wert von2
wenn nicht definiert.>= 2
- True, wenn die ganze Zahl größer als oder gleich zwei ist2
.InformationsquelleAutor der Antwort koola
Die nullte parameter des shell-Befehls ist der Befehl selbst (oder manchmal auch die shell selbst). Sie sollten mit
$1
.Ihre Boolesche Logik ist auch ein bisschen verwirrt:
Dies ist wahrscheinlich das, was Sie wollen:
InformationsquelleAutor der Antwort kojiro
Ich weiß, das wurde beantwortet, aber hier ist meins, nur weil ich denke Fall ist ein unter-schätzen-tool. (Vielleicht, weil die Menschen denken, es ist langsam, aber es ist mindestens so schnell wie eine wenn, manchmal schneller.)
InformationsquelleAutor der Antwort William