【发布时间】:2018-03-17 02:39:30
【问题描述】:
上下文
对于我们的很多CentOS服务器我想安装一些监控软件,该软件是基于CentOS版本的,我想检查发布版本并根据它安装软件。
问题
似乎 if 语句成功运行而没有错误,而结果对于两个或所有三个 if 语句都不应该为真。我查看了 if 命令和测试,看来我应该在 bash 中使用双括号和单 = 符号。我相信我在做一些非常简单的错误,但我就是找不到。
代码
#!/bin/bash
versionknown=false
version=$(</etc/centos-release)
known_version1="CentOS release 6.9 (Final)"
known_version2="CentOS Linux release 7.3.1611 (Core)"
if [[ "$version"="CentOS release 6.9 (Final)" ]] ; then
echo "Same versions as expected"
versionknown=true
#run commands for this specific version
fi
if [[ "$version"="CentOS Linux release 7.3.1611 (Core)" ]] ; then
echo "Same versions as expected v2"
versionknown=true
#run commands for this specific version
fi
if [[ "$versionknown"=false ]] ; then
echo "Different version detected than known:"
echo $version
echo "Aborted"
fi
echo $versionknown
结果
Same versions as expected
Same versions as expected v2
Different version detected than known:
CentOS Linux release 7.3.1611 (Core)
Aborted
true
更新
在收到一些回复后,我更改了代码,在等号 (=) 周围添加了空格。仍然不能按预期工作,因为比较应该在第二个 if 语句中返回 true,而它没有。
代码 #2
#!/bin/bash
versionknown=false
version=$(</etc/centos-release)
known_version1="CentOS release 6.9 (Final)"
known_version2="CentOS Linux release 7.3.1611 (Core)"
if [[ "$version" = "CentOS release 6.9 (Final)" ]] ; then
echo "Same versions as expected"
versionknown=true
#run script for this specific version
fi
if [[ "$version" = "CentOS Linux release 7.3.1611 (Core)" ]] ; then
echo "Same versions as expected v2"
versionknown=true
#run script for this specific version
fi
if [[ "$versionknown" = false ]] ; then
echo "Different version detected than known:"
echo $version
echo "Aborted"
fi
echo $versionknown
结果 #2
Different version detected than known:
CentOS Linux release 7.3.1611 (Core)
Aborted
false
更新
declare -p version 了解到/etc/centos-release 在脚本文件的末尾添加了一个空格,我相信在 CentOS 版本 6.9 (Final) 上并非如此。在字符串中添加空格,或者一起使用我的 known_version 变量并添加空格可以解决问题,脚本现在可以按预期工作。
【问题讨论】:
标签: linux bash if-statement string-comparison