new1
Anmeldungsdatum: 23. Januar 2009
Beiträge: 117
|
hallo @ all ich versuche ein Skript zu schreiben aber ich habe ein Problem mit Array's.
Die Syntax ist einleuchtend aber irgend wie möchte mein Rechner das nicht umsetzen. Zu Test Zwecken habe ich ein kleinen Skript aus der wiki genommen:
| #!/bin/bash
array[1]="Hallo"
echo ${array[*]}
|
Aber wenn ich das versuchen mit sh test zu starten bekomme ich das:
artur@artur-desktop:~/Dokumente$ sh test
test: 2: array[1]=Hallo: not found
test: 4: Bad substitution Ich habe schon einiges darüber gelesen aber vielleicht mache ich ach Form Fehler, aber die Syntax sollte so stimmen.
|
gehtmaguad
Anmeldungsdatum: 28. Juli 2008
Beiträge: 47
|
wenn du das scipt auf diese weise startest sollte es funktionieren: script ausführbar machen:
chmod u+x test script ausführen:
./test
|
pinguino
Anmeldungsdatum: 6. Februar 2007
Beiträge: 732
Wohnort: BW
|
wenn ich mich nicht irre, kriegst du damit die Anzahl der Elemente im Array echo ${array[*]}
|
gehtmaguad
Anmeldungsdatum: 28. Juli 2008
Beiträge: 47
|
pinguino schrieb: wenn ich mich nicht irre, kriegst du damit die Anzahl der Elemente im Array echo ${array[*]}
Um die Anzahl zu erhalten muss man vor dem Array ein Route hinzufügen: echo ${#array[*]} Im aktuellen Syntax wird der Inhalt wiedergegeben.
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17599
Wohnort: Berlin
|
new1 schrieb: Aber wenn ich das versuchen mit sh test zu starten bekomme ich das:
artur@artur-desktop:~/Dokumente$ sh test
Du schreibst oben, es sei ein Bashscript, und startest es dann als sh-Script. Das kann zwar funktionieren, funktioniert aber nicht immer. Umgekehrt wohl eher könnte man die meisten sh-Skripte auch per Bash starten. Die Shells sind aber nur teilweise kompatibel. gehtmaguads Lösung empfehle ich auch, wollte nur erklären, wieso es eine ist. Alternativ wäre auch bash test
eine. Wer schreibt mal einen kurzen Wikiartikel dazu, der leicht gefunden wird? ☺
|
gehtmaguad
Anmeldungsdatum: 28. Juli 2008
Beiträge: 47
|
user unknown schrieb: Alternativ wäre auch bash test
eine.
Wieso kann ich auf diese Art ein Script ausführen, ohne dafür Execute-Rechte zu haben?
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4668
Wohnort: Berlin
|
@gehtmaguad: Wieso nicht? Du hast ja die Rechte um die bash auszuführen. Für die ist das Skript dann einfach eine normale Textdatei, die eingelesen und interpretiert wird.
|
new1
(Themenstarter)
Anmeldungsdatum: 23. Januar 2009
Beiträge: 117
|
Wenn ich das verstehe habe ich bloß das falsch aufgerufen Das heißt:
bash test Ich danke euch ihr habt mir wirklich geholfen, und wider was gelernt 👍
|
gehtmaguad
Anmeldungsdatum: 28. Juli 2008
Beiträge: 47
|
Marc 'BlackJack' Rintsch schrieb: @gehtmaguad: Wieso nicht? Du hast ja die Rechte um die bash auszuführen. Für die ist das Skript dann einfach eine normale Textdatei, die eingelesen und interpretiert wird.
stimmt, eig. eh logisch 😉 danke
|
new1
(Themenstarter)
Anmeldungsdatum: 23. Januar 2009
Beiträge: 117
|
Noch eine frage zum Array.
Ich habe ein Skript der aus einer Datei Zeilen weise was ausliest und das dann in ein Array Speichert.
| #!/bin/bash
PF="/home/artur/Dokumente/TO/read.txt"
I="1"
cat $PF | while read FILE
do
array[$I]=$FILE
I=$((I+1))
done
echo ${array[9]}
|
Leider ist es so das ich den letzten teil des Skripts nicht ausführen kann da die Schleife sich in einem eigene Prozess sich befindet.
Ich möchte gern wissen wie ich das umgehen kann und den Automatismus beibehielten kann. wenn ich das ausführe passiert folgendes
artur@artur-desktop:~/Dokumente$ bash test
artur@artur-desktop:~/Dokumente$
wie kann ich die Werte des Array's auch außerhalb des Prozesses verwenden p.s. Die Datei ist nicht leer! mfg new
|
Lunar
Anmeldungsdatum: 17. März 2006
Beiträge: 5792
|
Der Index eines Arrays startet bei 0. Der manuelle Zähler ist allerdings eh überflüssig, da man Werte einfach durch Zuweisung an den leeren Index an ein Array anhängen kann. cat ist ebenso überflüssig und ist durch eine Shell-Umleitung zu ersetzen. Außerdem fehlt das Quoting der $file -Variable. Korrigiert sieht die Schleife so aus:
| while read file; do
array[]="${file}"
done < $PF
|
PF ist übrigens kein guter Name, da er keinerlei Aufschluss über den Inhalt der Variable gibt. Durchgehend groß geschriebene Namen sind übrigens per Konvention Konstanten vorbehalten.
|
Hello_World
Anmeldungsdatum: 13. Juni 2006
Beiträge: 3620
|
x[]=42 funktioniert weder in der zsh noch in der bash. Ich würde es ja so machen:
| i=0
while read file; do
array[$((i++))]="$file"
done
|
Auch ist die Information, dass der Intex eines Arrays bei 0 starte, so nicht richtig. Ein "Array" in der bash ist kein Array im eigentlichen Sinn, sondern eine Hashtabelle von Zahlen nach Strings. Ein bash-"Array" kann durchaus an der dritten Stelle einen Eintrag enthalten und an der ersten nicht. Beispielsweise kann man mit array=([1]=3 [3]=4) ein "Array" erzeugen, das nur an den Indizes 1 und 3 belegt ist. Mit ${!array[@]} kann man die Menge der belegten Indizes erhalten.
|
new1
(Themenstarter)
Anmeldungsdatum: 23. Januar 2009
Beiträge: 117
|
ja danke das sind alles super Vorschläge, aber es ist leider nicht das was ich wissen möchte es geht darum ob ich aus der schleife die werte sprich aus einem anderen Prozess Eindämmen kann und weiter verwenden kann.
|
Hello_World
Anmeldungsdatum: 13. Juni 2006
Beiträge: 3620
|
Wenn Du, wie von Lunar bereits vorgeschlagen, anstelle von cat eine Shell-Umleitung verwendest, wird die while-Schleife nicht in einer Subshell ausgeführt.
|
new1
(Themenstarter)
Anmeldungsdatum: 23. Januar 2009
Beiträge: 117
|
"KLATSCH AN DIE STIRN" jop das das funktioniert^^
|