我对shell脚本很陌生,在尝试检查字符串中的子串时,遇到了一个问题.我想建立一个代码,检查你是否在运行一个基于64位的系统。我想建立一个代码来检查你是否运行的是基于64位的系统。uname -m && cat /etc/*release
命令 x86_64
在第一行。
这是我的代码。
INFO=$(uname -m && cat /etc/*release)
if [ "$INFO" == *"x86_64"* ]
then
echo "You are running a 64bit-based system!"
else
echo "Your system architecture is wrong!"
exit
fi
虽然我运行的是64位系统 而且命令的输出中出现了x86_64的字样 if语句仍然返回false 所以我得到的输出是 Your system architecture is wrong!
. 应该是相反的.谁能帮我找出我做错的地方?我也接受改进我的方法的一般建议,但首先,我想知道错误在哪里。
非常感谢你的帮助
[
命令 [
相当于 检验 命令。test
不支持任何形式的高级匹配。test
可以用 =
- 比较字符串与 ==
在 test
是一个bash扩展。
通过这样做。
[ "$INFO" == *"x86_64"* ]
你实际上是在运行像这样的命令 [ "$INFO" == <the list of files that match
"x86_64"pattern> ]
- 的 *"x86_64"*
进行文件名扩展。如果你有一个名为 something_x86_64_something
它将被放置在那里,同样 cat *"x86_64"*
就可以了。
bash扩展 [[
指挥 支持模式匹配。做。
if [[ "$INFO" == *"x86_64"* ]]
要想使用任何posix shell的可移植脚本,就使用 case
:
case "$INFO" in
*x86_64*) echo yes; ;;
*) echo no; ;;
esac
在bash版本的>=3中,你可以使用一个regex。
[[ "$INFO" =~ x86_64 ]]
不知道为什么会这样 但你的代码在方括号加倍后就开始工作了。
INFO=$(uname -m && cat /etc/*release)
if [[ "$INFO" = *x86_64* ]]
then
echo "You are running a 64bit-based system!"
else
echo "Your system architecture is wrong!"
exit
fi
也许可以在下面找到一些解释 在Bash中,双方括号[[]]比单方括号[]更好吗? 和alike.
检查64位的方法之一是简单地grep binarch的输出。
if /bin/arch | grep -q x86_64
then
echo "it is 64 bit"
else
echo "it is not"
fi