2012-05-24 26 views
6

Korzystanie bash, chcę znaleźć system operacyjny i powiadamia użytkownika. Próbowałem:Detect OS ze skryptu bash i powiadamia użytkownika

OS='uname -s' 
echo "$OS" 
if [ "$OS" == 'Linux' ]; then 
    echo "Linux" 
else 
    echo "Not Linux" 
fi 

ja po prostu

uname -s 
Not Linux 

na terminalu, co jest nie tak. Jak poprawnie ustawić ciąg do tego, co uname zwraca?

Dzięki

Odpowiedz

12

Zamiast pojedyncze cytaty, to prawdopodobnie oznaczało użycie odwrócone, pojedyncze apostrofy:

OS=`uname -s` 

ale naprawdę chcesz

OS=$(uname -s) 

Również zamiast if statment, które ostatecznie stać się if/else serii, można rozważyć użycie sprawa:

case $(uname -s) in 
Linux) echo Linux;; 
*)  echo other;; 
esac 
+1

+1 za wskazanie '$()' ... – 0xC0000022L

+0

Dzięki za odpowiedź! Po raz pierwszy zauważyłem różnicę między "a": D – Graham

+1

To tylko jeden z powodów, dla których '$()' jest lepsze :) – chepner

1

ta zwróci OS zgodnie z wnioskiem - pamiętać, że uname niekoniecznie jest dostępna we wszystkich systemach-więc nie jest częścią tej odpowiedzi.

case "$OSTYPE" in 
    linux*) echo "linux" ;; 
    darwin*) echo "mac" ;; 
    msys*) echo "windows" ;; 
    solaris*) echo "solaris" ;; 
    bsd*)  echo "bsd" ;; 
    *)  echo "unknown" ;; 
esac 
+0

-1 Nie ma tu nic specyficznego dla Basha, ale w ogóle nie rozwiązuje problemu PO. – tripleee

+0

jego pytanie brzmi: "Używając basha, chcę znaleźć system operacyjny i powiadomić użytkownika" uname "nie jest agnostykiem systemu operacyjnego - nie będzie działać na niektórych systemach operacyjnych. To rozwiązanie powinno działać na bashie na większości. Masz rację, nie jest to specyfikacja bash, więc dostosowałem odpowiedź. – mogga

+0

"$ OSTYPE", odróżnia telefony z Androidem od pełnych instalacji Linuksa. – Alejandro