我目前正在編寫一個擦除硬碟的腳本。第一個腳本已經開始工作,並檢查是否有新的硬碟可用。如果有可用的新磁碟,它將在 a 中列出statuslist.txt
並使用areca_cli disk create drv=X
將其設為Pass Through
。
所有statuslist.txt
新磁碟均按插槽號碼和型號類型儲存。不幸的是,所有條目都列在一行中,而不是每行列出一個條目。我認為這使得與 的進一步合作變得更加複雜statuslist.txt
。
條目:
Slot#1 ST3500413AS Slot#2 SEAGATE ST32000444SS Slot#3 INTEL SSDSC2BA100G3 Slot#6 ST320LT007-9ZV142 Slot#8 SEAGATE ST32000444SS
對於statuslist.txt
我使用以下命令。
slist=$(areca_cli disk info | awk -F " *" '{if ($5 != "N.A." && $7 == "Free") print($4" "$5); }')
echo $slist >> /home/user/statuslist.txt
這是擦除硬碟中列出的第二個腳本statuslist.txt
。
if 語句檢查statuslist.txt
then 中是否有任何條目,用於dd
擦除它們。
sdx=$(lsscsi | awk '{if ($5 == "R001" && $5 != "-" ) print $NF}' | awk '{ print $0}')
x=$(cat /home/user/statuslist.txt | awk '{if ( $1 ~/slot#*/)print $1}')
if [ ${#wipe[@]} -gt 0 ]; then
for i in $x; do dd if=/dev/zero of=$sdx bs=10M status=progress; done
echo "Following hard drives are getting wiped:" $x
else
echo "dd didn't work"
fi
我對此腳本的期望是,它dd
僅在statuslist.txt
.此清單的目的是避免重新擦除已擦除的硬碟。擦除硬碟的條目將從文字檔案中刪除。
我遇到的問題是這個變數的正規表示式。
x=$(cat /home/user/statuslist.txt | awk '{if ( $0 ~/slot#*/) print $1}')
我沒有得到任何輸出。
答案1
您需要循環遍歷欄位:
x=$(awk '{ for (i = 1; i < NF; i++) { if ($i ~ /^Slot#/) { print $(i + 1) } } }' /home/user/statuslist.txt)
(這也修復了「slot」拼字錯誤,大小寫很重要)。
我不確定你如何在後續循環中嘗試使用它,你不會sdx
隨著改變而改變x
...