我正在检查安装的nginx版本是否与配置文件中定义的版本相同。
我的代码:
#check version
command="nginx -v"
nginxv=$( ${command} 2>&1 )
nginxvcutted="echo ${nginxv:21}"
nginxonpc=$( ${nginxvcutted} 2>&1 )
if [ $nginxonpc != ${NGINX_VERSION} ]; then
echo "${error} The installed Nginx Version $nginxonpc is DIFFERENT with the Nginx Version ${NGINX_VERSION} defined in the config!"
else
echo "${ok} The Nginx Version $nginxonpc is equal with the Nginx Version ${NGINX_VERSION} defined in the config!"
fi
这段代码“可以”工作,但我有一个问题:如果版本号发生了变化,则剪切编号(在本例中为nginxv:21
)不再适合。
范例:
nginx-1.13.12 vs nginx-1.15.0 (13 vs 14 chars)
有没有办法让它工作,没有麻烦?
**解决方案:**我改编了@Mohammad Saleh Dehghanpour的解决方案,它的工作就像一个魅力:
command="nginx -v"
nginxv=$( ${command} 2>&1 )
nginxlocal=$(echo $nginxv | grep -o '[0-9.]*$')
echo $nginxlocal
1.15.0
4条答案
按热度按时间ruoxqz4g1#
你可以使用正则表达式代替cut。例如,要从
nginx-1.15.0
中提取版本号,请使用:用途:echo 'nginx-1.15.0' | grep -o '[0-9.]*$'
输出:
1.15.0
wtzytmuj2#
结合我在这个页面上得到的一切:
nginx -v 2>&1 | awk -F' ' '{print $3}' | cut -d / -f 2
ao218c7q3#
你可以使用bash变量,然后使用grep提取版本。
lmyy7pcs4#
我很惊讶这里的答案如此复杂。没有理由涉及
awk
或grep
,它们有更多的可移植性问题,性能比普通的旧cut
略差。实际的问题是
nginx -v
打印到STDERR而不是STDOUT,因此,为什么涉及将错误流重定向到输出流(即2>&1
)工作。最简单的解决方案:
nginx -v 2>&1 | cut -d'/' -f2