Beim Versuch, ein Skript zu schreiben, das nach der Version der Anwendung sucht, wird der Wert zurückgegeben. Mein Problem ist, dass der Wert drei bis vier Einsätze lang ist (Beispiel 4.3.2).
Ich habe nach einer Weile gesucht und kann keine Syntax finden, die es Ihnen erlaubt, ein! = Oder -ge für alle Nummern zu verwenden, die höher sind als eine Zahl mit Punkten. Ich frage mich nur, ob jemand einen besseren Weg hat, oder ich werde einfach für jede Version weitere hinzufügen.
Was ich möchte
else if [ $version1 -ge "9.0.8" ]; then
Wie steht es jetzt geschrieben?
vercheck=`mdls -name kMDItemVersion /Applications/iMovie.app`
version=`echo ${vercheck:17}`
version1=`echo ${version:1:5}`
[...]
else if [ $version1 = "9.0.8" ]; [ $version1 = "9.1.1" ]; then
echo "You already have this version or a higher version installed"
exit 0
mdls -raw -name kMDItemVersion /Applications/iMovie.app
gibt Ihnen nur die Versionsnummer ohne das überflüssige Zeug.Antworten:
Ich glaube, ich habe das etwas angepasst http://bashscripts.org/forum/viewtopic.php?f=16&t=1248 . Ich mag es, weil es ziemlich kompakt und lesbar ist.
Dies ist optional, aber wünschenswert IMO:
Hier ist das Fleisch:
Ich benutze immer
$1
für "die lokal installierte Version" und$2
für "die Version, mit der ich vergleiche", also wenn mir das so bleibt$? = 1
Ich muss aktualisieren, ansonsten bin ich auf dem neuesten Stand (oder sogar voraus):Wenn Sie sich nur darum gekümmert hätten, ob
$1
war auf dem neuesten Stand (dh gleich oder größer als$2
) Sie könnten es noch einfacher machen:Nachfolgender Code wird nur ausgeführt, wenn eine neuere Version verfügbar ist. Andernfalls wird das Skript an diesem Punkt sauber beendet.
p .: Ich mache das in / bin / zsh nicht / bin / bash aber nicht denken In diesem Fall macht es einen Unterschied.
quelle
Tatsächlich ist der Vergleich von Versionsnummern ziemlich einfach (zumindest solange sie streng numerisch sind), da sie hierarchisch von links nach rechts strukturiert sind. Ein sequenzieller Vergleich in derselben Reihenfolge führt zu einem eindeutigen Ergebnis.
Folgende bash Funktion gibt 0 (wahr) zurück, wenn zwei Versionsnummern vorhanden sind nicht gleich , 1 (false), wenn dies der Fall ist, solange die Variablen vorhanden sind
$version_1
und$version_2
beide enthalten nur eine beliebige Anzahl von Zifferngruppen, die durch Punkte getrennt sind:Implementierung anderer Vergleiche, wie größer oder gleich , ist so einfach wie das Ändern des Vergleichsoperators der arithmetischen Bewertung (d. h.
(( ${version_1%%.*} >= "${version_2%%.*}" ))
).quelle
Ich kann Ihnen ein langes Beispiel geben "wenn die geprüfte Version zwischen min und max liegt" und Sie können sie für Ihre Bedürfnisse optimieren, indem Sie den Kopf -1 / Schwanz -1 ändern und 1 Variable schneiden:
quelle
Hier ist eine andere Lösung, die:
tr
Beachten Sie, dass es sich um Bash-Code handelt, der Array-Variablen verwendet.
Die Funktion gibt zurück:
Jedoch # 1 erfordert eine zusätzliche Funktion (aber Funktion
min
ist durchaus brauchbar zu haben):Allerdings # 2 - Versionszeichenfolgen können nicht mit alphanumerischen Teilen verglichen werden (obwohl dies eigentlich nicht schwierig ist, hinzugefügt zu werden).
quelle
Sie können verwenden Ausführung CLI, um die Einschränkungen der Version zu überprüfen
Beispiel für ein Bash-Skript:
quelle