linux - 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?
解决方案
您可以使用过滤 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
可能会做你需要的。
请澄清问题。
推荐阅读
- serverless-framework - 无服务器框架 - 在多个服务之间共享代码
- javascript - 如何在所有浏览器中同时播放视频和音频
- jmeter - 我有 Csv 文件,有 statusid,comanyid。我需要获取 statusid 并比较 status id ,基于公司应该执行的 id
- apache-spark - 为什么初始化 Spark Context 的代码在不同的源之间差别很大?
- nginx - 使用 NGINX 转发端口
- java - 如何让我的代码在一开始就失去空白?
- scala - 如何通过键列加入 RDD[Rating] 和 scala.collection.Map[Int, Double]?
- node.js - 新对等连接时如何同步 GUN db
- sql - 如何使用 SQL 从每个组中获得最高得分球员?
- json - 在 Lua 中从字符串中分离值