我想使用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)
此外,您可以考虑使用case语句,而不是一个if语句,因为if语句最终会变成一个if/else系列。
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
uname
不是跨平台的 - 它在某些操作系统上无法工作。这个解决方案应该在大多数bash上都能工作。你说得对,它不是特定于bash的,所以我已经调整了答案。 - rjmoggach
$()
更优秀的一个原因 :) - chepnercase "$(uname -s)"
,以防输出包含空格(尽管这种情况可能极为罕见)。 - chepner$()
只在紧跟着变量赋值符号=
的右侧使用时才需要引用。尝试执行/bin/ls $(date)
命令,可以看到$()
没有被引用的情况。这可能对上面给出的答案影响不大,因为uname -s
输出的几乎总是一个单词(没有空格)。 - Francis Litterio