For循环读取CVE列表并进行比较

时间:2013-08-13 21:23:12

标签: bash for-loop while-loop

我正在尝试遍历CVE列表,与rpm -qa --changelog进行比较,并输出RPM名称和CVE grep输出但是无法到达那里。

列表采用列格式。

我希望输出如下: RPM:CVE输出

rpm -q $RPM --changelog|grep $CVE

其中$ RPM来自rpm -qa,$ CVE来自cat CVE.list

2 个答案:

答案 0 :(得分:1)

以下不是一个光滑的单行,但它的工作原理。 - 约翰霍尔

#!/bin/ksh
#
# Show which installed RPM's contain specified CVE's.
#
echo "\
CVE-2011-3348
CVE-2012-0031
" | \
while read CVE
do
     case $CVE in
         "") break ;;
     esac
     echo; echo "Processing [$CVE] ... "
     rpm -qa | \
     while read RPM
     do
          rpm -q --changelog $RPM | grep $CVE > /dev/null
          case $? in
              0) echo "RPM: $RPM "
                 rpm -q --changelog $RPM | grep $CVE
              ;;
          esac
     done
done

答案 1 :(得分:0)

尝试类似

的内容
rpmout=$(rpm -q $RPM --changelog)
for vuln in $(cat "$CVE")
do
    cvegrep=$( rpm -q "$RPM" --changelog | grep "$vuln")
    echo -en "$rpmout : $cvegrep\n"
done

编辑:编辑以考虑特定的输出需求。这可能需要进一步编辑,这取决于CVE文件格式化的确切内容,以及rpm命令的输出是什么样的。