Centos7ボックスで次のスクリプトを実行しています。アイデアは、現在のバージョンと新しいバージョンとともに、現在更新可能なパッケージをリストすることです。これが完了したら、結果を.csvファイルに送信してExcelにインポートします。
これが私が使用しているbashスクリプトです:
#! /usr/bin/bash
echo \"timestamp\",\"package name\",\"current version\",\"update version\"
yum -q check-update| while read i
do
i=$(echo $i) #this strips off yum's irritating use of whitespace
if [ "${i}x" != "x" ]
then
TIMESTAMP=$( date +%D" "%r )
UVERSION=${i#*\ }
UVERSION=${UVERSION%\ *}
PNAME=${i%%\ *}
PNAME=${PNAME%.*}
echo \"$TIMESTAMP\",$(rpm -q "${PNAME}" --qf '"%{NAME}","%{VERSION}","')${UVERSION}\"
fi
done
結果は次のようになります。
"timestamp"、 "package name"、 "current version"、 "update version"
"06/20/18 02:19:37 PM"、 "cloudbackup-updater"、 "1.5.3"、 "1.5.16-1 "
" 06/20/18 02:19:37 PM "、" dhclient "、" 4.1.1 "、" 12:4.1.1-53.P1.el6.centos.4 "
" 06/20/18 02: 19:37 PM "、" dhcp-common "、" 4.1.1 "、" 12:4.1.1-53.P1.el6.centos.4 "
" 06/20/18 02:19:37 PM "、" kernel "、" 2.6.32 "、" "kernel"、 "2.6.32"、 "" kernel "、" 2.6.32 "、" "kernel"、 "2.6.32"、 "" kernel "、" 2.6。 32 "、" 2.6.32-696.30.1.el6 "
" 06/20/18 02:19:37 PM "、" kernel-firmware "、" 2.6.32 "、"2.6.32-696.30.1.el6"
"06/20/18 02:19:37 PM"、 "kernel-headers"、 "2.6.32"、 "2.6.32-696.30.1.el6"
5行目が情報を繰り返していることに注意してください。これは、スクリプトがRPMクエリを実行するときに、フルネーム「kernel.x86_64」ではなくパッケージ「kernel」をクエリしているためだと思います。
走ったら
yum check-update
次のパッケージを更新できます。
cloudbackup-updater.noarch
dhclient.x86_64
dhcp-common.x86_64
kernel.x86_64
kernel-firmware.noarch
kernel-headers.x86_64
スクリプトの何が問題になっていますか?フルネームではなく、各パッケージの名前の最初の部分のみに一致しますか?
問題はPNAME
割り当てです
PNAME=${PNAME%.*}
これは、ファイル名から拡張子を削除するために使用したものです。ピリオドの右側にあるすべて(および含む)を削除しています。私が見る限り、この行は本当に必要ありません。変数の割り当てを引用することもお勧めします。だからこのようなもの:
TIMESTAMP="$( date +%D" "%r )"
UVERSION="${i#*\ }"
UVERSION="${UVERSION%\ *}"
PNAME="${i%%\ *}"
#PNAME="${PNAME%.*}"
$PNAME
これらの割り当ての出力:
cloudbackup-updater.noarch
dhclient.x86_64
dhcp-common.x86_64
kernel.x86_64
kernel-firmware.noarch
kernel-headers.x86_64
編集私はあなたのwhileループがyumの出力を間違って解析していると思っています。その行を次のように変更してみてください。
yum -q check-update | tr -s " " | while read PNAME UVERSION extra
これでyumのスペースの問題を処理できるので、を削除できますi=$(echo $i)
。また、これにより、個々の値が変数に直接読み込まれます。以来続いて、$i
もはや存在しない、あなたは変更することができますif [ "${i}x" != "x" ]
しif [ "${PNAME}x" != "x" ]
(これは実際には空白をチェックするためのかなり巧妙な方法です)。したがって、最終的なスクリプトは次のようになります。
echo \"timestamp\",\"package name\",\"current version\",\"update version\"
yum -q check-update | tr -s " " | while read PNAME UVERSION extra
do
if [ "${PNAME}x" != "x" ]; then
TIMESTAMP=$( date +%D" "%r )
echo \"$TIMESTAMP\",$(rpm -q "${PNAME}" --qf '"%{NAME}","%{VERSION}","')${UVERSION}\"
fi
done
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加