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/script: 11行目: [: 10.8: 単項演算子が必要です

しかたがない

4

1 に答える 1

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
于 2013-07-10T13:43:30.587 に答える