我正在嘗試編寫一個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