2012-03-28 13 views
5

piszę skrypt bash dla Mac OS X Lion 10.7 i chciałbym wiedzieć, jak mogę sprawdzić wersję systemu operacyjnego w bashu i czy wersja jest dozwolona powiedzmy 10.7.1, a następnie wykonuje polecenie i kontynuuje działanie skryptu i robi to samo dla innej wersji, powiedzmy 10.7.3, a następnie wykonuje inne polecenie niż polecenie, które zostało użyte dla 10.7.1?Sprawdź wersję systemu operacyjnego, a następnie wydaj polecenie, jeśli poprawna wersja

Odpowiedz

4

Potrzebujesz komendy sw_vers w systemie OS X. Drukuje niektóre odczytywalne przez człowieka łańcuchy, w tym wersję systemu 10.X.X (sw_vers -productVersion). Możesz także użyć uname, aby sprawdzić wersję jądra; jeśli twój skrypt jest kiedykolwiek przeniesiony do innych wersji Uniksa, będzie tam działać uname.

+0

dzięki. źle wypróbuję to –

5

OS_Version (pełna ... Przykład 10.7.3)

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

LUB

sw_vers -productVersion 

OS (krótka ... przykład 10,7)

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

LUB

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

Dzięki za naprawę i napiwek. – E1Suave

+1

Musiałem użyć 5 USD zamiast 6 USD. – funroll

+0

'sw_vers -ProductVersion' powinno być prawdopodobnie pierwszą odpowiedzią. Z doświadczenia i czytania komentarzy unika się martwienia o "5 USD" zamiast "6 USD" i jest bardziej skalowalny – tresf

1

Jeśli trzeba tylko sprawdzić główną wersję systemu operacyjnego, należy pamiętać, że wersja Darwin odpowiada jej, w ciągu bash jest ustawiona zmienna powłoki, która jest łatwa zmuszać do porównywalnej liczbowo liczby całkowitej.

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 
Powiązane problemy