Я пытаюсь написать сценарий BASH для исправления моих серверов CentOS. Моя цель состоит в том, что когда я запускаю скрипт, он выводит имя пакета, текущую установленную версию и новую версию пакета. Что-то вроде этого:
nspr.x86_64 / 4.8.8-3.el6 / 4.8.9-3.el6_2
Таким образом, если мне когда-нибудь понадобится понизить версию из-за того, что пакет что-то сломал, у меня будет запись об этом.
Команда command 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
передается как массив? Есть лучший способ сделать это?