Ich arbeite gerade an einem Skript zum Löschen von Festplatten. Das erste Skript funktioniert bereits und prüft, ob neue Festplatten verfügbar sind. Wenn eine neue Festplatte verfügbar ist, wird sie in einer Liste aufgeführt statuslist.txt
und mithilfe areca_cli disk create drv=X
von auf eingestellt Pass Through
.
Darin statuslist.txt
werden alle neuen Datenträger nach Steckplatznummer und Modelltyp sortiert. Leider werden alle Einträge in einer Zeile aufgelistet und nicht jeder Eintrag pro Zeile. Ich denke, das erschwert die weitere Arbeit mit dem statuslist.txt
.
Einträge:
Slot#1 ST3500413AS Slot#2 SEAGATE ST32000444SS Slot#3 INTEL SSDSC2BA100G3 Slot#6 ST320LT007-9ZV142 Slot#8 SEAGATE ST32000444SS
Hierzu statuslist.txt
verwende ich folgenden Befehl.
slist=$(areca_cli disk info | awk -F " *" '{if ($5 != "N.A." && $7 == "Free") print($4" "$5); }')
echo $slist >> /home/user/statuslist.txt
Dies ist das zweite Skript zum Löschen der in aufgelisteten Festplatten statuslist.txt
.
Die if-Anweisung prüft, ob Einträge vorhanden sind, und löscht diese statuslist.txt
dann .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
Meine Erwartung an dieses Skript ist, dass es dd
nur auf Festplatten aus der statuslist.txt
. Der Zweck dieser Liste ist es, das erneute Löschen bereits gelöschter Festplatten zu vermeiden. Die Einträge für gelöschte Festplatten werden aus der Textdatei gelöscht.
Das Problem, das ich habe, ist der reguläre Ausdruck für diese Variable.
x=$(cat /home/user/statuslist.txt | awk '{if ( $0 ~/slot#*/) print $1}')
Ich bekomme keine Ausgabe.
Antwort1
Sie müssen eine Schleife über die Felder ausführen:
x=$(awk '{ for (i = 1; i < NF; i++) { if ($i ~ /^Slot#/) { print $(i + 1) } } }' /home/user/statuslist.txt)
(dadurch wird auch der Tippfehler „Slot“ behoben, Groß-/Kleinschreibung ist wichtig).
Ich bin nicht sicher, wie Sie versuchen, das in der nachfolgenden Schleife zu verwenden, Sie ändern sich nicht, sdx
während Sie sich ändern x
...