if语句判断内核是32还是64

时间:2012-08-18 21:34:10

标签: linux shell if-statement

我想知道#!/bin/sh中的内核是64还是32。

我构建了这段代码!

krnl=$(uname -i)

# Check whether 64 or 32 bit kernel and download the correct version;
if [ $krnl='i386' ] ; then # 32
  # Do 32-bits stuff
else
  # Do 64-bits stuff
fi

但似乎总是如此。我做错了什么,为什么会发生这种情况以及如何解决这个问题?我用Google搜索的内容总是以bash显示我或者不起作用。

提前致谢!

5 个答案:

答案 0 :(得分:1)

Whitesapce在bash中意义重大。你需要在'='字符周围留出空格,如下所示:

if [ $krnl = 'i386' ] ; then # 32

否则,您已经定义了一个长字符串“x86_64 = i386”或“i386 = i386”,非空字符串返回true。

答案 1 :(得分:1)

'='符号周围需要空格才能正确测试$ krnl值:

krnl=$(uname -i)

# Check whether 64 or 32 bit kernel and download the correct version;
if [ $krnl = 'i386' ] ; then # 32
  # Do 32-bits stuff
else
  # Do 64-bits stuff
fi

答案 2 :(得分:0)

您必须在[命令中的等号周围放置空格。否则,它获得一个参数,如果该参数不是空字符串,则返回true,它永远不会是。

此外,uname -m可能会更好。我在amd64计算机上从uname -i获得“未知”。

答案 3 :(得分:0)

在我的计算机上,uname -p返回i686,而uname -i返回i386

答案 4 :(得分:0)

在我的控制台uname -m中,uname -iuname -p返回x86_64,所以:

krnl=`uname -i`

if [ $krnl="x86_64" ] ; then # 64
  echo "64"
else
  echo "32"
fi

应该 在我的机器上工作。

更新:

krnl=`uname -i`
if [ "$krnl" == "x86_64" ]; then
        echo "64"
else
        echo "32"
fi

当我改为:

if [ "$krnl" != "x86_64" ]; then

回应32