私のCentOSサーバーにパッチを当てるためのBASHスクリプトを作成しようとしています。私の目標は、スクリプトを実行すると、パッケージ名、現在インストールされているバージョン、および新しいパッケージのバージョンを出力することです。このような何か:Bashスクリプト - ループの複数の引数とawkについて
nspr.x86_64/4.8.8-3.el6/4.8.9-3.el6_2
この方法では、私が今までダウングレードする必要がある場合は、パッケージが何かを壊したので、私はこれの記録を持っています。
コマンドyum check-update
コマンドは私に、上記情報の第一部分(パッケージ名)と情報の第三枚(新バージョン)を与える、と私は2つを分離するためにawk
を使用することができます。その後は簡単です。 rpm -q {package}
を実行して2番目の情報を取得し、連結してください。
しかし、自分のコードで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
1つの解決策はawkですべてを行うことです。 –