Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
ren22
Beitrag
von ren22 » 03.09.2014 18:26:30
hallo ich versuche gerade ein script zu schreiben was alle .dep dateien in ein array 'cat' -ted und wenn das jeweilige array element am ende der schleife ist, soll dieses array element mit 'unset' gelöscht werden was aber nur bei "lcd4linux" klappt .. den rest löscht das script nicht .. kann mir wer sagen wo der Fehler liegt?
Code: Alles auswählen
#!/bin/bash
EXTENSIONS=(lcd4linux libpng libgd libusb-compat)
EXTENSIONFILESSOURCE=/mnt/sda1/tce/optional
#
#get the size of the extensions
#
set -x
function1 () {
for i in ${EXTENSIONS[@]}; do
if [ -f $EXTENSIONFILESSOURCE/$i.tcz.dep ];then #if .dep file exists write it into an array
<------>echo "dep"
fi
unset EXTENSIONS[$i] #remove current array-element from array
echo "-------------"
echo ${EXTENSIONS[@]}
echo ${#EXTENSIONS[@]}
sleep 1
done
}
while [ $(echo ${#EXTENSIONS[@]}) -gt 0 ] ; do
function1
done
echo "-------------"
echo ${EXTENSIONS[@]}
echo ${#EXTENSIONS[@]}
ausgabe:
Code: Alles auswählen
./depfinder.sh
dep
-------------
libpng libgd libusb-compat
3
-------------
libpng libgd libusb-compat
3
-------------
libpng libgd libusb-compat
3
dep
-------------
libpng libgd libusb-compat
3 ...CTRL+C
wie man sieht "lcd4linux" wird gelöscht aber der rest wird nicht gelöscht und bleibt in einer endlos schleife hängen
vielen Dank
-
smutbert
- Beiträge: 8342
- Registriert: 24.07.2011 13:27:39
- Wohnort: Graz
Beitrag
von smutbert » 03.09.2014 20:51:36
i nimmt bei dir die einzelnen Werte des arrays an, zum Löschen würdest du aber imho den Index benötigen.
-
gms
- Beiträge: 7798
- Registriert: 26.11.2004 20:08:38
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von gms » 03.09.2014 21:53:35
Vorsicht auch beim Löschen über den Index, denn dabei entstehen Lücken im Index
Code: Alles auswählen
gms@sirius:~$ EXTENSIONS=(lcd4linux libpng libgd libusb-compat)
gms@sirius:~$ set | grep EXTENSIONS
EXTENSIONS=([0]="lcd4linux" [1]="libpng" [2]="libgd" [3]="libusb-compat")
gms@sirius:~$ unset EXTENSIONS[2]
gms@sirius:~$ set | grep EXTENSIONS
EXTENSIONS=([0]="lcd4linux" [1]="libpng" [3]="libusb-compat")
gms@sirius:~$ echo ${#EXTENSIONS[@]}
3
-
Cae
- Beiträge: 6349
- Registriert: 17.07.2011 23:36:39
- Wohnort: 2130706433
Beitrag
von Cae » 04.09.2014 03:00:42
Meinten Sie folgendes?
echo und Subshell erzeugt an der Stelle genau denselben Output, ist aber deutlich verschwurbelter (und hat mehr Overhead, ist also langsamer).
Generell ist noch zu sagen, dass du sprechende Namen verwenden solltest, bei
function1() weiss niemand, was gemeint ist,
unset_if_subdepends() oder aehnlich ist erheblich aussagekraeftiger (zumindest scheint der Code mal etwas in dieser Richtung zu tun zu sollen).
Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
-
rendegast
- Beiträge: 15041
- Registriert: 27.02.2006 16:50:33
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von rendegast » 04.09.2014 07:30:33
indexed array <-> assoziativer array
Code: Alles auswählen
#!/bin/bash
#declare -a EXTENSIONS # indexed array
#EXTENSIONS=(lcd4linux libpng libgd libusb-compat) # ein indexed array
declare -A EXTENSIONS # assoziativer array
EXTENSIONS[lcd4linux]=lcd4linux
EXTENSIONS[libpng]=libpng
EXTENSIONS[libgd]=libgd
EXTENSIONS[libusb-compat]=libusb-compat
echo EXTENSIONS@ ${EXTENSIONS[@]}
for i in lcd4linux libpng libgd libusb-compat; do
echo ii $i
echo AAA EXTENSIONS[$i]
echo AAA ${EXTENSIONS[$i]}
echo AA0 ${EXTENSIONS[0]} AA1 ${EXTENSIONS[1]} AA2 ${EXTENSIONS[2]} AA3 ${EXTENSIONS[3]} AA4 ${EXTENSIONS[4]}
echo AAlcd4linux ${EXTENSIONS[lcd4linux]} AAlibpng ${EXTENSIONS[libpng]} AAlibgd ${EXTENSIONS[libgd]} AAlibusb-compat ${EXTENSIONS[libusb-compat]
done
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")