String 从Bash脚本检测操作系统并通知用户

String 从Bash脚本检测操作系统并通知用户,string,bash,system,uname,String,Bash,System,Uname,使用bash,我希望找到操作系统并通知用户。我试过: OS='uname -s' echo "$OS" if [ "$OS" == 'Linux' ]; then echo "Linux" else echo "Not Linux" fi 我只是 uname -s Not Linux 在终端上,这是错误的。如何将字符串正确设置为uname返回的值 谢谢,您可能想使用反勾号,而不是单引号: OS=`uname -s` 但你真的想要 OS=$(uname -s) 此外,不

使用bash,我希望找到操作系统并通知用户。我试过:

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

uname -s 
Not Linux
在终端上,这是错误的。如何将字符串正确设置为uname返回的值


谢谢,您可能想使用反勾号,而不是单引号:

OS=`uname -s`
但你真的想要

OS=$(uname -s)

此外,不是一个if语句,它最终将成为I/Enter系列,您可以考虑使用:

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

这将按要求返回操作系统-请注意,
uname
不一定在所有操作系统上都可用,因此它不是此答案的一部分

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

谢谢你的回答!这是我第一次注意到“a”和“a”之间的区别:这只是
$()
更优越的一个原因:)@chepner。即使输出中包含空格,也不需要引号
$()
是一种引用机制,因此将其置于双引号中是多余的。考虑一下:a='foobar';案例$(echo foo bar)在中$a) :;;esac
$()
仅在变量赋值中紧靠
=
右侧使用时引用。尝试
/bin/ls$(date)
查看
$()
缺少引用。这可能对上面给出的答案影响不大,因为
uname-s
几乎总是输出一个单词(没有空格)。$()根本不执行引用。Bash没有在变量赋值的右侧拆分单词。-1这里没有Bash特定的内容,但它也根本不能解决OP的问题。他的问题是“使用Bash,我想找到操作系统并通知用户”
uname
不是操作系统不可知的-它在某些操作系统上不起作用。这个解决方案应该适用于大多数情况下的bash。你是对的,它不是特定于bash的,所以我调整了答案。“$OSTYPE”区分了android手机和完整的Linux安装。