Bash:Nginx 版本检查剪切

问题描述 投票:0回答:4

我正在尝试检查安装的 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
bash nginx cut
4个回答
6
投票

您可以使用正则表达式代替剪切。例如,要从

nginx-1.15.0
中提取版本号,请使用:

echo 'nginx-1.15.0' | grep -o '[0-9.]*$'

输出:

1.15.0


1
投票

结合此页面上的所有内容我得到:

nginx -v 2>&1 | awk -F' ' '{print $3}' | cut -d / -f 2


0
投票

您可以使用 bash 变量,然后使用 grep 提取诗句。

version=$(nginx -v 2>&1); echo $version | grep -o '[0-9.]*'

0
投票

我很惊讶这里的答案如此复杂。没有理由涉及

awk
grep
,它们比普通的旧
cut
有更多的可移植性问题和稍差的性能。

实际问题是

nginx -v
打印到 STDERR 而不是 STDOUT,因此为什么涉及将错误流重定向到输出流(即
2>&1
)的解决方案有效。

最简单的解决方案:

nginx -v 2>&1 | cut -d'/' -f2

© www.soinside.com 2019 - 2024. All rights reserved.