Panzli
Anmeldungsdatum: 17. Dezember 2021
Beiträge: 19
|
Hallo zusammen, bei Folgenden Script würde ich gerne,dass die Variable aus der Schleife ausgeben ("returnt") wird, wie stelle ich dies am besten an? Gebt mir gern noch weitere Verbesserungsvorschläge. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 | device0="/dev/sda"
device1="/dev/sdb"
device2="/dev/sdc"
device3="/dev/sdd"
timeinput=""
time=""
os=$(lsblk |grep /boot/efi |grep -o sd.)
os="/dev/$os"
read -p "Wann sollen die Festplatten geshreddet werden (in Stunden)" timeinput
#echo $time
#time=$($timeinput*60)
#echo $time
time=$((timeinput * 3600))
sleep $time
for device in $device0 $device1 $device2 $device3
do
if [ "$device" = "$os" ]
then
echo "skipped $os"
device="notdelete"
echo "Wie bekomme ich das nach außerhalb der Schleife?"
#test="testinfunc"
fi
echo $device
done
echo "Darunter sollte notdelete stehen..."
echo $device0
echo $device1
echo $device2
echo $device3
#sudo shred -v $device1 &sudo shred -v $device2 & sudo shred -v $device3 &
|
|
karzer
Wikiteam
Anmeldungsdatum: 10. April 2022
Beiträge: 1424
Wohnort: Bad Oeynhausen
|
Hallo, ich würde das so machen: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | i=0
for device in device0 device1
do
if [ "$device" = "$os" ];
then
echo "skipped $os"
eval device$i="notdelete"
i=$((i + 1))
done
echo "$device0"
echo "$device1"
# -> notdelete
|
|
fleet_street
Top-Wikiautor
Anmeldungsdatum: 30. August 2016
Beiträge: 2378
Wohnort: Hunsrück (dunkle Seite)
|
Wieso muss das aus der Schleife raus? Damit man hinterher noch mal unterscheiden muss? Das wäre doch umständlich. …
for device in $device0 $device1 $device2 $device3
do
if [ "$device" = "$os" ]
then
echo "skipped $os"
device="notdelete"
else
echo "Das gerät Gerät $device wird gelöscht"
# Für den Test mal nur anzeigen, d. h. später ohne „echo“
echo "sudo shred -v $device"
fi
done Ach, und es darf auch eingerückt werden. 😉
|
Panzli
(Themenstarter)
Anmeldungsdatum: 17. Dezember 2021
Beiträge: 19
|
Danke, aber so muss doch erst der Shred durchlaufen, bevor mit device1 weitergemacht wird oder?
|
karzer
Wikiteam
Anmeldungsdatum: 10. April 2022
Beiträge: 1424
Wohnort: Bad Oeynhausen
|
Wenn $device0 nicht "notdelete" ist natūrlich. Bei meiner Lösung allerdings nicht.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12965
|
Panzli schrieb: Hallo zusammen, bei Folgenden Script würde ich gerne,dass die Variable aus der Schleife ausgeben ("returnt") wird, wie stelle ich dies am besten an? Gebt mir gern noch weitere Verbesserungsvorschläge.
Was ist denn das Ziel der ganzen Geschichte? Im kleinen Maß habe ich verstanden, dass Du die Liste (das sollte vielleicht ein Array sein) filtern willst, so dass ein spezielles Device (vermutlich das, auf dem das OS installiert ist) herausgenommen wird. Ich würde das vermutlich eher so machen: 1
2
3
4
5
6
7
8
9
10
11
12
13 | devices=(/dev/{a..d})
os="/dev/$(lsblk | grep /boot/efi | grep -o sd.)"
isOs() { test "$1" = "$os"; }
for d in "${devices[@]}"; do
if isOs "$d"; then
echo "Ignore $d"
else
echo "Work on $d"
fi
done
|
Die Funktion lohnt natürlich nur, wenn Du die Logik an mehr als einer Stelle brauchst. Ansonsten würde ich den Test in die Schleife legen.
|
Panzli
(Themenstarter)
Anmeldungsdatum: 17. Dezember 2021
Beiträge: 19
|
Genau, ich möchte zeitgleich, dass alle drives außer dem Betriebsystem geshreddet werden.
|
karzer
Wikiteam
Anmeldungsdatum: 10. April 2022
Beiträge: 1424
Wohnort: Bad Oeynhausen
|
Warum denn nicht nacheinander?
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12965
|
karzer schrieb: Warum denn nicht nacheinander?
Weil's schneller geht wahrscheinlich. Panzli schrieb: Genau, ich möchte zeitgleich, dass alle drives außer dem Betriebsystem geshreddet werden.
Also sowas
1
2
3
4
5
6
7
8
9
10
11
12
13 | #!/bin/bash
os="/dev/$(lsblk | grep /boot/efi | grep -o sd.)"
for d in /dev/{a..d}; do
if [ "$d" = "$os" ]; then
echo "Ignore $d"
else
echo "Shreddering $d ..." &
fi
done
wait
|
Zeile 11 muss dann natürlich das passende Kommando sein. Der wait stellt sicher, dass alle Kinder beendet sind, bevor dieses Skript sich beendet.
|
karzer
Wikiteam
Anmeldungsdatum: 10. April 2022
Beiträge: 1424
Wohnort: Bad Oeynhausen
|
Geht es auch so? | # $array enthält die Inhalte aller $device-Variablen
devices_stri=""
for elem in "${array[@]}"
do
if [[ $elem != "nodelete" ]]; then
devices_stri+="$elem "
fi
done
sudo shred -v $devices_stri &
|
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12965
|
karzer schrieb: Geht es auch so?
Nee, ohne Einrückung und Whitespace wird das nicht funktionieren. 😉
| # $array enthält die Inhalte aller $device-Variablen
devices_stri=""
for elem in "${array[@]}"
do
if [[ $elem != "nodelete" ]]; then
devices_stri+="$elem "
fi
done
sudo shred -v $devices_stri &
|
Die letzte Zeile macht gar keinen Sinn, wenn wirklich ein Kommando alle Geräte plätten soll. Dann sollte man das nicht in den Hintergrund schicken. Ich finde das Array hier zu umständlich: da man sowieso nur ein Mal durch die Schleife muss, würde ich das lieber so machen wie in meinem Beispiel. Und wenn Du schon mit Arrays arbeitest, dann würde ich devices_stri auch zu einem Array machen.
|
karzer
Wikiteam
Anmeldungsdatum: 10. April 2022
Beiträge: 1424
Wohnort: Bad Oeynhausen
|
Hallo, geht das denn? sudo shred -v $devices_array
? Oder muss es sudo shred -v ${devices_array[*]} sein? rklm schrieb: karzer schrieb: Geht es auch so?
Nee, ohne Einrückung und Whitespace wird das nicht funktionieren. 😉
Das vergesse ich immer in den Forenbeiträgen...
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12965
|
karzer schrieb:
geht das denn? sudo shred -v $devices_array
? Oder muss es sudo shred -v ${devices_array[*]} sein?
Gehen tut das. Aber eigentlich macht man das mit dem Array so, wenn man denn schon ein Array nimmt: | sudo shred -v "${devices_array[@]}"
|
rklm schrieb: karzer schrieb:
Nee, ohne Einrückung und Whitespace wird das nicht funktionieren. 😉
Das vergesse ich immer in den Forenbeiträgen...
Aber warum nur?
|
karzer
Wikiteam
Anmeldungsdatum: 10. April 2022
Beiträge: 1424
Wohnort: Bad Oeynhausen
|
Vielen Dank für die Antwort! Jetzt weiß ich Bescheid. rklm schrieb: Aber warum nur?
Ich mache meistens Copy & Paste aus dem Terminal und sorge dann nur dafür, dass nicht alles auf einer Zeile steht...
Werde ich jetzt ändern.
|