Shell programmierung / Arrays?

jack-daniels-net

Grünschnabel
Hallo.


Bin linux neuling. ;-]
Wollte gern ma ein kleines script verfassen.... in SH :-(

Über ls -fl bekommt man ja alle dateien als liste angezeigt.
Wie kann ich das in ein array einlesen?

über myarray[n]=ls -fl bekomm ich einen fehler :-(
(is an directory)

Kann mir jemand einen tipp geben wie man(n) so etwas löst?


Gruss JackY
 
Hallo,

ls -fl ist ein Kommando. Um dessen Ergebniss in einer Shell Variable speichern zu können,
benutzt du folgende Kommandosubstitution:

Code:
MYVAR=`ls -fl`

echo $MYVAR #gibt den Variablen Inhalt aus

In deinem Fall für ein Array gehst du folgendermaßen vor:

Code:
MYARRAY[0]=`ls -fl`
echo ${MYARRAY[0]}

Gruß

RedWing
 
Code:
#!/bin/sh
MYARRAY[0]=`ls -fl | grep -v "^d" | awk '{print $9;}'`
echo "Dateien in $PWD: ${MYARRAY[0]}"
Wie oben beschrieben, allerdings werden Verzeichnisse ("Flag 'd'") nicht angezeigt, und es wird nur der Dateiname ausgegeben.

Was dann so aussieht:

fabian@TuX:~$ ./bla.sh
Dateien in /home/fabian:
.bashrc
.bash_profile
.bash_history
.viminfo
bla.sh
 
Du hast zwar mit dem hier nicht das erreicht was du wolltest, allerdings geht es so:

Code:
#!/bin/sh

MYVAR=`ls -fl`
echo "$MYVAR"

exit

Wobei das exit nicht notwendig ist...
 
ok das hat jetz funktioniert ;-)

wusste nicht das linux zwischen ' und ` unterscheidet

nochmal zu den arrays.... ich hab das jetz an position 0 geschrieben...
wie kann ich das unterteilen in 1. 2. 3. dateiname?

also das ich den jeweiligen dateinamen über
MYVAR[0]=dateiname1
MYVAR[1]=dateiname2
MYVAR[2]=dateiname3
aufrufen kann
 
Da ich diese Sprache eigentlich garnicht kann, kann ich dir das leider nicht beantworten ;-) Ich wuerde es mir allerdings von anderen Sprachen ableitung, und da wuerd ich eine for Schleife machen...

Code:
i=1
for dateiname in $MYARRAY[0]
do
   ARRAY[$i]=`$dateiname`
   i++
done

Oder sowas ;-)
 
Probier es einmal so:


Code:
ARRAY=""
ALLFILES=`ls -fl | awk -F' ' '{print $8}'`      
FILECOUNT=`echo $ALLFILES | awk -F' ' '{print NF}'`
i=1

while ! [ $i -gt $FILECOUNT ]
do
        ARRAY[$i]=`echo $ALLFILES | awk -F' ' '{print $'"$i"'}'`
        i=`expr $i + 1`
done

Gruß

RedWing
 
Cool,genau wie ich es haben wollte :)

@RedWing + Fabian B.: Ihr habt mir echt geholfen!

Jetzt muss ich mich nur noch mit den leerzeichen in den Dateinamen rumärgern....

Aber das pack ich schon irgendwie ;)



Thx JackY
 
Kein Problem ;-)

Wobei ich sagen muss, die Loesung von RedWing funktioniert hier nicht.
fabian@TuX:~$ ./array.sh
fabian@TuX:~$

fabian@TuX:~$ cat array.sh
ARRAY=""
ALLFILES=`ls -fl | awk -F' ' '{print $8}'`
FILECOUNT=`echo $ALLFILES | awk -F' ' '{print NF}'`
i=1

while ! [ $i -gt $FILECOUNT ]
do
ARRAY[$i]=`echo $ALLFILES | awk -F' ' '{print $'"$i"'}'`
i=`expr $i + 1`
done

Komisch ;-(
 

Neue Beiträge

Zurück