使用 bash 扫描 CPU 架构

pat*_*ick 3 command-line bash scripts

我正在为我工​​作的公司开发一个工具包,问题是,这个“工具包”中的工具之一需要具有识别架构的能力,我已经可以工作 32 位和 64 位,但我无法让手臂工作,有人可以帮忙吗?这就是我得到和需要的..

if [ "$arch" == 'armv' ];
then
echo "ARM Architecture
Run Code Online (Sandbox Code Playgroud)

我想要它做的是,当检测到arm架构(6或7我并不真正关心这一点)时,它只是说arm架构,但我已经尝试编辑

if [ "$arch" == 'armv' ];
Run Code Online (Sandbox Code Playgroud)

if [ "$arch" == 'armv*' ];
Run Code Online (Sandbox Code Playgroud)

如果有人知道解决方案,欢迎任何帮助。

哦,我使用 shell/bash 因为他们不想在机器上安装任何额外的程序,所以我使用 bash 和 shell 脚本,这样他们就有自己的程序了:)

- - - - - - - - - 编辑 - - - - - - - - -

这是完整的代码,这样你们就可以了解我正在尝试的内容

arch=$(uname -i)

if [ "$arch" == 'x86_64' ];
then 
echo "X64 Architecture" 
fi

if [ "$arch" == 'x86_32' ];
then
echo "X32 Architecture"
fi

if [ "$arch" == 'armv*' ];
then
echo "Arm architecture"
fi
Run Code Online (Sandbox Code Playgroud)

hee*_*ayl 6

如果您使用关键字bash,[[而不是[( test) 内置函数并从 glob 模式中删除引号,则您的模式将起作用:

[[ $arch == arm* ]] && echo 'This is ARM Architecture'
Run Code Online (Sandbox Code Playgroud)

您还可以使用[[关键字和=~运算符来使用正则表达式匹配:

[[ $arch =~ ^arm ]] && echo 'This is ARM Architecture'
Run Code Online (Sandbox Code Playgroud)

^arm检查变量是否$arch包含arm在开头(正则表达式标记^与行的开头匹配)。


另外,对于 32 位体系结构,uname -i应该显示i386ori686i486,而不是x86_32

另一方面,您应该使用elif构造而不是使用if三次,它是为这样的任务而设计的。所以你的完整脚本可以重写为:

[[ $arch == arm* ]] && echo 'This is ARM Architecture'
Run Code Online (Sandbox Code Playgroud)