2013-07-10 4 views
0

Я пытаюсь проверить версию операционной системы OS X, если это 10,7 или выше. С другой стороны, если до 10.7 сделать что-то еще. Можете ли вы, ребята, указать мне в правильном направлении, почему я получаю сообщение об ошибке ниже?Помощник с оператором сравнения

спасибо!

#!/bin/sh 

cutOffOS=10.7 
osString=$(sw_vers -productVersion) 
echo $osString 
current=${osString:0:4} 
echo $current 
currentOS=$current 
echo $currentOS 
if [ $currentOS >= cutOffOS ] ; then 
    echo "10.8 or later" 
    chflags nohidden ~/Library 
else 
    echo "oh well" 
fi 

Выход при запуске выше сценарий:

10.8.4

10,8

10,8

/Users/Tuan/Desktop/IDFMac.app/Contents/Resources/ сценарий: строка 11: [: 10.8: ожидаемый операционный оператор

oh well

ответ

1

Игнорирование (очень реальной) проблемы, что sw_vers может вернуть версию «число» с 3 частями (например, 10.7.5), bash не может иметь дело с числами с плавающей запятой, только целыми числами. Вам нужно разбить номер версии на свои целые компоненты и протестировать их отдельно.

cutoff_major=10 
cutoff_minor=7 
cutoff_bug=0 

osString=$(sw_vers -productVersion) 
os_major=${osString%.*} 
tmp=${osString#*.} 
os_minor=${tmp%.*} 
os_bug=${tmp#*.} 

# Make sure each is set to something other than an empty string 
: ${os_major:=0} 
: ${os_minor:=0} 
: ${os_bug:=0} 

if [ "$cutoff_major" -ge "$os_major" ] && 
    [ "$cutoff_minor" -ge "$os_minor" ] && 
    [ "$cutoff_bug" -ge "$os_bug" ]; then 
    echo "$cutoff_major.$cutoff_minor.$cutoff_bug or later" 
    chflags nohidden ~/Library 
else 
    echo "oh well" 
fi 
+0

Хорошо! Просто для любопытства: как насчет того, будет ли одна версия 3-мя цифрами, а другая только 2? – fedorqui

+0

Хорошая точка; Я забыл объяснить это. В 'bash' вы можете использовать неопределенные переменные в' ((x> y)) ', и они будут обрабатываться как 0. Для оболочки POSIX вам нужно явно указать пустые переменные в 0. Я обновлю. – chepner

Смежные вопросы