Hallo zusammen!
Ich bin noch relativ neu in der Linux-Materie, auch was bash scripte angeht. Ich habe mir eins zusammengebastelt um die gesamtkapazität der physischen hdds sowie deren freien Speicherplatz anzeigen zu lassen. Das Ganze wird dann ganz zum schluss kompakt als eine zeile ausgeben. Ich nutze hier 2 schleifen jede für sich allein funktioniert, nur nicht zusammen. Und hier kommt ihr ins spiel...
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 | #/bin/bash freesize='0000' #einlesen der physischen hdds -> array disks=( $(sed -ne 's/.*\([sh]d[a-zA-Z]\+$\)/\1/p' /proc/partitions) ) #alle disks ausgeben: echo -e "\e[1;37m\033[1m---------------------------------" for i in ${disks[@]}; do #groesse der hdds auslesen, filtern size=$(lsblk | awk -v disklabel=$i '$1==disklabel{print $4}') #------------------------------------------- echo aktuelle Disk: $i echo ----------- #groesse der partitionen auslesen, ausgabe in MB #df --block-size=1M | awk -v disklabel=$i '$1==disklabel{print}' echo ----------- partspace=$(df --block-size=1M | awk -v disklabel=$i '/disklabel/{print $4}') for x in ${partspace[@]}; do echo partspace: $x #groesse der partitionen addieren freesize=`expr "$x" + "$freesize"` done echo free $freesize" MB" echo echo #------------------------------------------- #ausgabe zusammenfassen wholestring=$wholestring"\e[1;31m${i} \033[32m${size}iB ${freesize}MB free \e[00m" done # ausgabe des ergebnisses echo -e $wholestring echo -e "\e[1;37m\033[1m---------------------------------" done # ausgabe des ergebnisses echo -e $wholestring echo -e "\e[1;37m\033[1m---------------------------------" |
Das script kann 1:1 kopiert werden, es verwendet keine extra programme, nur die boardmittel. Mein Problem hängt warscheinlich in Zeile 16 an der übergabe der bash-variablen an die variable von awk. Komischer weise funktioniert die selbe syntax in der ersten schleife ab Zeile 7. Zur erklärung: das arry "disks" beinhaltet die bezeichnung der physischen hdds (sda, sdb,...). Zeile 9 für die gesamtkapazität funktioniert auch prima. Zeile 16 soll die ausgabe von df nach den hdd bezeichnungen ($i) filtern und in einem array speichern. Jedoch wird hier nicht richtig gefiltert, bzw. die variable scheinbar nicht korrekt an awk übergeben. Anschließend sollen alle elemente des arrays zusammengezählt werden.
Ich find einfach den Fehler nicht, und meine programmiertkenntnisse sind eher bescheiden.