0

我想知道内核是 64 还是 32 英寸#!/bin/sh

我构建了这段代码!

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

但它似乎总是返回真实的。我做错了什么,为什么会发生这种情况以及如何解决这个问题?我用谷歌搜索的内容总是在 bash 中显示或不起作用。

提前致谢!

4

5 回答 5

1

Whitesapce 在 bash 中很重要。'=' 字符周围需要空格,如下所示:

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

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

于 2012-08-18T21:39:03.203 回答
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
于 2012-08-18T21:43:25.197 回答
0

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

另外,uname -m可能会更好。uname -i我从amd64 机器上得到“未知” 。

于 2012-08-18T21:37:38.627 回答
0

在我的机器上,uname -p返回i686uname -i返回i386

于 2012-08-18T21:39:32.380 回答
0

在我的控制台uname -m中,uname -i然后uname -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

于 2012-08-18T21:40:40.480 回答