2012-05-24 41 views
6

使用bash,我想查找操作系統並通知用戶。我想:從Bash腳本中檢測OS並通知用戶

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

我只是得到

uname -s 
Not Linux 

終端,這是錯誤的。我如何正確設置字符串到什麼uname返回?

感謝

回答

12

而不是單引號,你可能是指使用反引號:

OS=`uname -s` 

但真要

OS=$(uname -s) 

而且,而非如果statment,最終成爲一個if/else系列,您可以考慮使用案例:

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

+1指出'$()'... – 0xC0000022L

+0

感謝您的答案!這是我第一次注意到'和a'之間的區別:D – Graham

+1

這只是'$()'優越的原因之一:) – chepner

1

這將按要求返回操作系統 - 請注意,uname不一定適用於所有操作系統,因此它不屬於此答案的一部分。

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

-1]這裏沒有什麼Bash特定的,但它也根本解決了OP的問題。 – tripleee

+0

他的問題說:「使用bash,我想找到操作系統並通知用戶,」uname「不是操作系統不可知的 - 它不適用於某些操作系統。這個解決方案應該在大多數情況下工作。你是正確的,它不是特定的bash,所以我調整了答案。 – mogga

+0

「$ OSTYPE」區分Android手機和完整的Linux安裝。 – Alejandro