2012-12-19 9 views
5

Cześć Jestem nowy w skryptach bash. Właśnie napisałem ten prosty program, ale to jest błąd rzucania.Porównanie ciągów w bashu nie działa

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

Używanie == lub -eq dla obu przypadków Otrzymuję następujący błąd i drukuje on inny condn.

./ostype.sh: Linia 3: [GNU/Linux == GNU/Linux]: Nie ma takiego pliku lub katalogu

Okna

wersja Bash GNU bash, wersja 3.2 .48 (1) - uwolnij (x86_64-suse-linux-gnu)

+0

Ta kwestia została już odpowiedział zobaczyć ten link [1] [1]: http://stackoverflow.com/questions/394230/detect-the-os-from-a-bash-script – mana

+0

Z właściwe odstępy '=' i '==' powinny działać w celu porównania ciągów. '-eq' jest porównaniem całkowitym. – Hennes

Odpowiedz

17

spróbować

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

notatka przestrzeniach i jednolitego =.

[ to tak naprawdę program, a reszta to argumenty!

+1

+1 dla '[jest w rzeczywistości programem, a reszta to argumenty! .. .. Wiele osób nie wie o tym. Nawet ja nie wiedziałem kilka miesięcy temu. :-) – anishsane

+0

i dla wszystkich intencji i celów prawdopodobnie chcesz użyć wbudowanej powłoki '[[', która jest prawdopodobnie szybsza. – yiding

+1

Och ... Pomyślałem, że '' jest również przesłonięte przez powłokę wbudowaną. tak jak '[[&' echo' ... – anishsane

5

Użyj porównania =. Zobacz: http://tldp.org/LDP/abs/html/comparison-ops.html

Ponadto, nie powinno być miejsca wokół nawiasach kwadratowych, a operator porównania, tj

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

Nie! ten sam błąd rzuca – Reuben

+0

@Reuben uwaga na ed spację. –

+0

mam to :) dziękuję! – Reuben

Powiązane problemy