2012-03-28 7 views
5

Ich schreibe ein Bash-Skript für Mac OS X Lion 10.7 und ich würde gerne wissen, wie ich die Version des Betriebssystems in bash überprüfen kann und ob die Version erlaubt ist sagen 10.7.1 dann macht es einen Befehl und fährt mit dem Skript fort und macht dasselbe für eine andere Version, sagen wir 10.7.3, dann macht es einen anderen Befehl als der Befehl, der für 10.7.1 verwendet wurde?Überprüfen Sie die Version von OS und geben Sie dann einen Befehl aus, wenn die korrekte Version

Antwort

4

Sie möchten den Befehl sw_vers unter OS X. Es druckt einige lesbare Zeichenfolgen, einschließlich der Systemversion 10.X.X (sw_vers -productVersion). Sie können auch uname verwenden, um die Kernel-Version zu überprüfen. Wenn Ihr Skript jemals auf andere Unix-Varianten portiert wurde, wird uname dort funktionieren.

+0

danke. Probier das mal aus –

5

OS_Version (full ... Beispiel 10.7.3)

system_profiler SPSoftwareDataType | grep "System Version" | awk '{print $6}' 

ODER

sw_vers -productVersion 

OS (kurz ... Beispiel 10,7)

system_profiler SPSoftwareDataType | grep "System Version" | awk '{print $6}' | sed "s:.[[:digit:]]*.$::g" 

OR

OS_Version=$(OS (short… example 10.7) | sed "s:.[[:digit:]]*) 

bash:

#!/bin/bash 

# Use one of the examples given above to create the OS_Version variable 

if [[ ${OS_Version} == 10.7.3 ]]; then 
    echo "Operating System is a match... will continue on." 
else 
    echo "Operating System is NOT a match... will NOT continue." 
fi 
+0

Danke für den Fix und den Tipp. – E1Suave

+1

Ich musste $ 5 anstelle von $ 6 verwenden. – funroll

+0

'sw_vers-productVersion' sollte wohl die erste Antwort sein. Aus Erfahrung und Lesen der Kommentare vermeidet es, sich um $ 5 gegenüber $ 6 zu kümmern und es ist besser skalierbar – tresf

1

Wenn Sie nur die wichtigsten OS-Version überprüfen müssen, halten Sie die Darwin-Version entspricht es im Geist und in bash auf eine Shell-Variable festgelegt ist, ist einfach zu einer numerisch vergleichbaren Ganzzahl zwingen.

if [[ ${OSTYPE:6} -ge 13 ]]; then 
    echo "At least 10.9, so feeling fine."; 
else 
    echo "Time to put the old cat to sleep."; 
fi