2012-05-24 20 views
6

Utilizzando bash, voglio trovare il sistema operativo e informare l'utente. Ho provato:Rileva sistema operativo da script Bash e notifica utente

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

ottengo solo

uname -s 
Not Linux 

sul terminale, che è sbagliato. Come imposto correttamente la stringa su cosa restituisce uname?

Grazie

risposta

12

Invece di virgolette singole, probabilmente lo scopo di utilizzare backticks:

OS=`uname -s` 

ma si vuole veramente

OS=$(uname -s) 

Inoltre, piuttosto che un caso statment, che alla fine sarà diventare una serie if/else, potresti considerare l'utilizzo del caso:

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

+1 per indicare '$()' ... – 0xC0000022L

+0

Grazie per la risposta! Questa è la prima volta che ho notato la differenza tra un 'e un ': D – Graham

+1

Questo è solo un motivo' $() 'è superiore :) – chepner

1

Ciò restituirà il sistema operativo come richiesto - si noti che uname non è necessariamente disponibile su tutti i sistemi operativi quindi non fa parte di questa risposta.

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

-1 Non c'è nulla di specifico di Bash qui ma non risolve affatto il problema dell'OP. – tripleee

+0

la sua domanda dice "Usando bash, voglio trovare il sistema operativo e avvisare l'utente" 'uname' non è agnostico OS - non funzionerà su alcuni sistemi operativi. Questa soluzione dovrebbe funzionare su bash sulla maggior parte. Hai ragione a dire che non è specifico di bash quindi ho modificato la risposta. – mogga

+0

"$ OSTYPE", distingue tra telefoni Android e installazioni complete di Linux. – Alejandro