首页 > 解决方案 > Bash 脚本自动化检查是否安装了某个版本的应用程序

问题描述

我正在尝试在我的 Linux 服务器中自动化一些基础知识,我想检查是否安装了特定版本的应用程序,如 git、python 或其他一些应用程序,如果安装而不是更新到最新的稳定版本。这是我的脚本,似乎我遗漏了一些东西:

#!/bin/sh

CURRENT_OS=$(hostnamectl   | awk '/Operating/ { print $3 }')
CURRENT_PY=$(python3 -V    | awk '{ print $2 }')
CURRENT_GT=$(git --version | awk '{ print $3 }')

if [ $CURRENT_OS=~"Fedora" || $CURRENT_OS=~"Centos" || $CURRENT_OS=~"Red Hat" ]; then
   echo "➥➥➥ Current System Is Based On $CURRENT_OS"
       sudo dnf clean all
       sudo dnf -y upgrade
   if  [ $CURRENT_PY!="Python 3.8" ]; then
       echo "➥➥➥ Installing Latest Python Release"
       sudo dnf -y install python3.8
   else
       echo "➥➥➥ Latest Python Release Found In System"
   fi
fi

还有没有机会将命令的输出交换python3 -V | awk '{ print $2 }'为 3.8 而不是 3.8.5?还有我如何重构操作系统版本检查,所以是 Red Hat、Centos 还是 Fedora?

标签: linuxbash

解决方案


您可以使用过滤 Python 版本sed,例如

python3 -V | awk '{ print $2 }' | sed 's/\([0-9]*\.[0-9]*\).*/\1/'

关于操作系统版本检查的问题尚不清楚。如果您只想在输出中使用正确的分发名称,您可以使用例如

echo "➥➥➥ Current System Is Based On $CURRENT_OS"

编辑:

这并不是为了修复“错字”,而是我对不清楚的问题的(可能是错误的)解释。

如果您想找到 Red Hat、Centos 或 Fedora 的通用标准,文件的存在/etc/redhat-release可能表明该系列的发行版,就像/etc/debian_version表明基于 Debian 的发行版(包括例如 Ubuntu)一样。这意味着像这样的支票

if [ -e /etc/redhat-release ]; then
   echo "➥➥➥ Current system seems to be a distribution of the RedHat family"
   # ...
fi

可能会做你需要的。

请澄清问题。


推荐阅读