【问题标题】:If statement to determine whether a kernel is 32 or 64 [duplicate]If语句确定内核是32还是64 [重复]
【发布时间】:2012-08-14 21:12:09
【问题描述】:

我想知道#!/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

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

提前致谢!

【问题讨论】:

  • $ uname -i 给我GenuineIntel
  • @MichałGórny 你是 ubuntu 用户吗?
  • @ant 有一些区别。但如果你这么认为,我可以删除。
  • 先生,这不是我一个人的决定,这是我的意见。请不要根据我的意见删除
  • 您是否尝试过我标记为重复的答案中的其他选项?即getconf LONG_BIT 应该返回6432。您是否还在 if 语句中使用了 == 而不是 =stackoverflow.com/a/7308155/169277uname -a 打印什么?

标签: linux shell if-statement


【解决方案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】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          在我的控制台uname -muname -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

          【讨论】:

          • 您还没有解决间距问题,您所做的只是将其反转,因此它始终采用 64 分支而不是始终采用 32 分支。还是错了。
          • 你是对的,但出于不同的原因(我不只是交换)。看看编辑过的问题
          • 这是正确的答案 我认为没有理由拒绝stackoverflow.com/a/106416/169277
          • 更新后的版本还不错。第一个是错误的。不过,在 [ 命令中使用 == 是一种 bashism。
          • 真实故事,= '' 也可以
          猜你喜欢
          • 2011-04-19
          • 1970-01-01
          • 2012-11-30
          • 2012-08-01
          • 2011-04-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-20
          相关资源
          最近更新 更多