2012-12-19 14 views
5

こんにちは、私はbashスクリプトの新機能です。ちょうどこの単純なプログラムを書いたが、それは間違いを投げている。bashでの文字列比較が機能していません

#!/bin/bash 
os=`uname -o` 
echo $os 
if ["$os"=="GNU/Linux"] ; then 
    echo "Linux" 
else 
    echo "Windows" 
fi 

使い方==または-eqは両方のケースのために私は次のエラーを取得していますし、それは他のcondnを印刷しています。

./ostype.sh:3行目:[GNU/Linuxの== GNU/Linuxの]:そのようなファイルやディレクトリはありません

のWindows

バッシュバージョン:GNUのbashの、バージョン3.2 .48(1)-release(x86_64-suse-linux-gnu)

+0

この質問はすでにこのリンクを参照して、回答されている[1] [1]:http://stackoverflow.com/questions/394230/detect-the-os-from-a-bash-script – mana

+0

付き適切な間隔 '='と '=='は両方とも文字列を比較するために働くべきです。 '-eq'は整数比較です。 – Hennes

答えて

17

if [ "$os" = "GNU/Linux" ] 

ノートスペース、および単一=を試してみてください。

[は実際にはプログラムであり、残りは引数です!

+1

+1は '[実際にはプログラムで、残りは引数です]' ..多くの人はそれを知らない。数ヶ月前に私は知らなかった。 :-) – anishsane

+0

であり、すべての目的と目的のために、おそらくより速いシェル組み込み '[['を使いたいかもしれません。 – yiding

+1

ああ...私は、 '['はシェル組み込みによってもオーバーライドされたと思っていました。 '' [''& 'echo' ...のように... – anishsane

5

文字列比較のために=を使用してください。参照:http://tldp.org/LDP/abs/html/comparison-ops.html

はまた、角括弧の周りの空間と比較演算子が存在すべきである、すなわち

if [ "$os" = "GNU/Linux" ]; then 
^^ ^^   ^ 
    | |  | |   | 
    \-\-----\-\-----------\-- (need spaces here) 
+0

いいえ!同じエラーが – Reuben

+0

@Reubenを投げて、スペースを編集することに注意してください。 –

+0

それを持って:)感謝! – Reuben