我正在尝试编写一个BASH脚本来修补我的CentOS服务器。我的目标是当我运行脚本时,它输出包名称,当前安装的版本和新的包版本。这样的事情:Bash脚本 - For循环多个参数和awk
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
是否作为数组传递?有一个更好的方法吗?
解决办法之一就是在awk中完成整个事情 – 2012-03-05 11:25:50