Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux If语句来确定内核是32还是64_Linux_Shell_If Statement - Fatal编程技术网

Linux If语句来确定内核是32还是64

Linux If语句来确定内核是32还是64,linux,shell,if-statement,Linux,Shell,If Statement,我想知道#中的内核是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 但这似乎总是正确的。我做错了什么,为什么会发生这种情况,以及我如何解决这个问题?我在谷歌上搜索

我想知道
#中的内核是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中显示给我,否则就不起作用


提前谢谢

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


另外,
uname-m
可能更好。我从amd64机器上的
uname-I
中获得“unknown”。

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

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

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

在我的机器上,
uname-p
返回
i686
,而
uname-i
在我的控制台
uname-m
uname-i
uname-p
返回
x86\u 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

要正确测试$krnl值,在“=”符号周围需要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

您尚未修复间距问题,您所做的只是将其反转,使其始终采用64分支而不是32分支。这仍然是错误的。您是对的,但原因不同(我不只是交换)请看一看编辑后的问题这是正确的答案,我看不出有理由投反对票。更新后的版本没有那么糟糕。第一个版本只是错了。在
中使用
=
[
命令是一种巴什主义。真实的故事,
='
同样有效,
$uname-i
为我提供了
真正的英特尔
。@MichałGórny你是ubuntu用户吗?@ant有一些区别。但是如果你这样认为,我可以删除。这不是我一个人决定的,先生,这是我的意见。请不要根据我的意见删除你从我标记为重复的答案中尝试了其他选项?例如,
getconf LONG\u BIT
应该返回
64
32
。你是否在if语句中使用了
=
而不是
=
?uname-a打印了什么?