Bash:Nginx Version

6kkfgxo0  于 2023-10-17  发布在  Nginx
关注(0)|答案(4)|浏览(112)

我正在检查安装的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
ruoxqz4g

ruoxqz4g1#

你可以使用正则表达式代替cut。例如,要从nginx-1.15.0中提取版本号,请使用:用途:
echo 'nginx-1.15.0' | grep -o '[0-9.]*$'
输出:1.15.0

wtzytmuj

wtzytmuj2#

结合我在这个页面上得到的一切:
nginx -v 2>&1 | awk -F' ' '{print $3}' | cut -d / -f 2

ao218c7q

ao218c7q3#

你可以使用bash变量,然后使用grep提取版本。

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

lmyy7pcs4#

我很惊讶这里的答案如此复杂。没有理由涉及awkgrep,它们有更多的可移植性问题,性能比普通的旧cut略差。
实际的问题是nginx -v打印到STDERR而不是STDOUT,因此,为什么涉及将错误流重定向到输出流(即2>&1)工作。
最简单的解决方案:
nginx -v 2>&1 | cut -d'/' -f2

相关问题