我想知道#!/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显示我或者不起作用。
提前致谢!
答案 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 -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