0
我正在編寫一個腳本,旨在幫助我劃分服務器列表,以便在發佈公司產品的新版本時,我不必打擾服務,但只需部分服務器,通過實施每次都在服務器列表中進行更改。如何將分區剩菜添加到最後列表中?
該腳本連接到一些內部儀表板,並提取當前活動服務器(服務器輪換)的主機名,它應該計算服務器的數量,並根據團隊決定的規則,它應該劃分列表來創建更小的列表來處理。例如,如果某個數據中心包含35個服務器,我希望腳本將大列表分成4個不等於列表,或者如果有10個服務器,我希望它將大列表分成2個小的列表名單。
大多數腳本的工作已經和我唯一的問題是,在一些網站上有38臺服務器,他們通過4
問題適用於分工的規則是,38是可分4剩飯。看起來就像我寫劇本的方式,剩飯都被忽略了。
我想將剩餘食物添加到最後的列表中,它怎麼做?
這裏的腳本:
#!/bin/bash
site="http://10.X.X.X/dashboard/company/DCD/dcd.aspx?dcd="
tmpfile="DCD.tmp"
echo "Choose DCD:"
select DCD in 'ams2' 'ny4' 'ny4a' 'lax' 'sg' 'Quit'; do
wget $site$DCD -O $tmpfile -nv &> /dev/null
grep http $tmpfile | awk -F"<" '{print $7}' | awk -F/ '{print $3}' | grep -v '^$' | sort | awk -F: '{print $1}' > "$DCD"_active.list
# echo site: $site , DCD: $DCD
if [[ "$DCD" = "Quit" ]]; then
exit 0
fi
break
done
srvnum=$(/usr/bin/wc -l $DCD'_active.list' | awk '{print $1}')
echo "<--- List of servers: --->"
/bin/cat "$DCD"_active.list
echo "<--- Number of active servers: $srvnum --->"
if [[ $srvnum -lt "2" ]]; then
echo "Not enough servers"
elif [[ $srvnum -ge "10" ]] && [[ $srvnum -le "20" ]]; then
echo "It is recommended to divide the list by 2"
divider="2"
elif [[ $srvnum -ge "21" ]] && [[ $srvnum -le "34" ]]; then
divider="3"
echo "It is recommended to divide the list by 3"
elif [[ $srvnum -ge "35" ]]; then
echo "It is recommended to divide the list by 4"
divider="4"
fi
echo srvnum: $srvnum
echo divider: $divider
entries=$(echo $srvnum/$divider | bc)
echo "Each list will contain: $entries entries"
for i in $(seq $divider); do
first=$(((i-1)*(srvnum/divider)+1))
last=$((i*(srvnum/divider)))
sed "$first,$last!d" "$DCD"_active.list | head -n$entries | tail -$entries > "$DCD"_$i.list
done
echo "Deleting temporary files..."
rm -f "$DCD"_active.list $tmpfile
好像它掛在這一點上:'+尾-n1' –
@ItaiGanot:對不起,我忘了插入的文件名:-) – choroba