Shell脚本以检测系统是32位还是64位。
(Shell script to detect if system is a 32-bit or 64-bit)这个问题出现的原因以及解决方法:
某些情况下使用cpp命令来判断系统是32位还是64位,但是这种方法可能不适用于所有环境,只能在gcc环境下使用。这种方法的好处是可以检测任何64位架构,而不仅仅是x64架构(比如POWER,SPARC,IA64等)。
提问者还考虑过检查sizeof(void *)
的值,但是这种方法需要编译器的支持,并且可靠性不如运行file
命令检查系统二进制文件的方式。
解决方法如下:
if echo __SIZEOF_POINTER__ | cpp -E - - | grep '^8$' >/dev/null; then do_stuff fi
Shell脚本用于检测系统是否为32位或64位的问题。问题出现的原因是有用户想要编写一个脚本来判断系统的位数,从而调用相应的程序。下面是解决这个问题的方法:
解决方法是使用uname -m
命令,根据输出的结果判断系统的位数。如果输出为x86_64
,则表示为64位系统;如果输出为i686
,则表示为32位系统。根据这个判断结果,可以调用相应的程序。
然而,这种方法只在x86架构的系统上有效。
有用户在32位机器上成功使用了这种方法。
另外,可能会运行一个"generic" x86内核,而不是i686内核。因此,还需要测试不同的字符串来判断系统的位数。
感谢大家的帮助,特别感谢twid的指导,我成功解决了这个问题。
问题出现的原因是,执行脚本时无法正确判断系统是32位还是64位,只会得到一个命令行提示符“$”。
解决方法是,使用简单的字符串比较来判断系统位数。使用if语句和方括号,判断命令“$(uname -m | grep '64')”返回的结果是否为空。如果不为空,则系统是64位;如果为空,则系统是32位。
以下是完整的解决方法代码:
if [ "$(uname -m | grep '64')" != "" ]; then echo "ARCH: 64-bit" else echo "ARCH: 32-bit" fi
这段代码通过使用方括号和字符串比较,能够正确判断系统是32位还是64位,并输出相应的提示信息。