gpt4 book ai didi

Bash 脚本 - For 循环多个参数和 awk

转载 作者:行者123 更新时间:2023-12-04 19:35:10 24 4
gpt4 key购买 nike

我正在尝试编写一个 BASH 脚本来修补我的 CentOS 服务器。我的目标是,当我运行脚本时,它会输出包名、当前安装的版本和新的包版本。像这样的东西:

nspr.x86_64 / 4.8.8-3.el6 / 4.8.9-3.el6_2

这样,如果我因为某个包损坏了某些东西而需要降级,我就有了这方面的记录。

命令 yum check-update命令给了我上面列出的第一条信息(包名)和第三条信息(新版本),我可以使用 awk将两者分开。之后很容易;运行 rpm -q {package}获取第二条信息,然后将它们连接起来。

但是,我遇到了 for 的麻烦。在我的代码中循环。我需要将多个参数传递到循环中(包名和更新版本),这样我就可以 echo他们以后。

这是我的代码:
for package in `/usr/bin/yum --cacheonly --noplugins check-update | awk '{print $1, $2}'`;
do
OLD_VER=`rpm -q ${package}` # ${package} should actually be $1 from the awk statement above

NEW_VER=${2} # This is $2 from the awk statement above

echo "${package} / ${OLD_VER} / ${NEW_VER}"
done

请原谅代码中明显的错误;我是 BASH 脚本的新手。我的困惑主要源于 awk;我不太熟悉它,也不熟悉它如何与 BASH 脚本交互。但是,我认为很清楚我要做什么。是否 package作为数组传递?有一个更好的方法吗?

最佳答案

你想阅读整行:

 /usr/bin/yum --cacheonly --noplugins check-update |
while read line; do
set - $line;
echo first: $1 second: $2
done

关于Bash 脚本 - For 循环多个参数和 awk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9565728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com