PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Teile von Strings in Variablen speichern.



bobafe
28.07.2005, 09:11
Hallo,

wie ihr seht, ich bin nicht gad der Hellste, was Unix angeht, aber deshalb arbeite ich ja daran ;)

Mein aktuelles Problem sieht so aus: Der Nutzer gibt den komplette Pfad einer Datei an, also z.B /Bereich/Abteilung/Gruppe.txt

Dabei kann die Datei natürlich in einem beliebigen Unterordner stecken, es sind als nicht immer nur drei Slashs.

Ich möchte nun, dass in der Variablen file Gruppe.txt und in der Variabelen path /Bereich/Abteilung/ (für dieses Beispiel) steht.

Könnt ihr mir bitte sagen, wie das geht?

Gruß,
Andreas.

hmhweb
28.07.2005, 09:28
Hallo,

Dir hilft man basename und man dirname

hmh

h2owasser
28.07.2005, 09:28
Hallo,

wie ihr seht, ich bin nicht gad der Hellste, was Unix angeht, aber deshalb arbeite ich ja daran ;)

Mein aktuelles Problem sieht so aus: Der Nutzer gibt den komplette Pfad einer Datei an, also z.B /Bereich/Abteilung/Gruppe.txt

Dabei kann die Datei natürlich in einem beliebigen Unterordner stecken, es sind als nicht immer nur drei Slashs.

Ich möchte nun, dass in der Variablen file Gruppe.txt und in der Variabelen path /Bereich/Abteilung/ (für dieses Beispiel) steht.

Könnt ihr mir bitte sagen, wie das geht?

Gruß,
Andreas.

dafür gibt es die Befehle "basename [Dateiname]" bzw. "dirname [Dateiname]".

bobafe
28.07.2005, 09:51
Hm, also wenn ich es so mache (was mit Sicherheit falsch ist),

dir="/Bereich/Abteilung/Gruppe.txt"
path=dirname $dir
file=basename $dir
echo $path
echo $filedann kriege ich folgende Ausgabe:

tet[2]: /Bereich/Abteilung/Gruppe.txt: not found
tet[3]: /Bereich/Abteilung/Gruppe.txt: not found

Es steht ja auch gar nicht fest, ob die Datei bzw. der Pfad auch wirklich existieren, wenn sie der Nutzer eingibt.

hmhweb
28.07.2005, 10:43
Hi,
Du wirst wohl nicht drumherumkommen, Dich ein wenig in shell scripting einzulesen, vielleicht hier:

http://www.koeln-lug.de/sites/tipps/bourneshell.htm
http://www.linux-ag.de/linux/LHB/node26.html

Ansosnsten hilft
path=`dirname $dir` oder auch path=$(dirname $dir)
bzw.
file=`basename $dir`oder file=$(basename $dir)

hmh

bobafe
28.07.2005, 12:13
Danke.

Jetzt ist mir aber nochwas aufgefallen: wenn der Nutzer nun z.B. nur /Bereich/Abteilung angibt, weil er alle den gesamten Unterordner Abteilung meint, dann wird ja mit basename Abteilung angegeben.

Gibt es daher eine Möglichkeit, zu prüfen, ob Abteilung eine Datei oder ein Verzeichnis ist?

hmhweb
28.07.2005, 13:26
Danke.

Jetzt ist mir aber nochwas aufgefallen: wenn der Nutzer nun z.B. nur /Bereich/Abteilung angibt, weil er alle den gesamten Unterordner Abteilung meint, dann wird ja mit basename Abteilung angegeben.

Gibt es daher eine Möglichkeit, zu prüfen, ob Abteilung eine Datei oder ein Verzeichnis ist?


Klar gibt es dafür auch was - und zwar die "test" Konstrukte:

if test -d $dir ; then # kann man auch if [ -d $dir ] ; then .... schreiben
echo "Verzeichnis"
else
echo "kein Verzeichnis"
fi

Dateien kann man in gleicher Weise mit -f testen, s.a. man bash unter Compound commands

hmh

bobafe
29.07.2005, 09:16
Also ich habe es jetzt so genacht:

# Auswertung Parameter 2 (Quellenauswahl)
if test "$2" != ""
then
SRC_ROOT=`dirname $2`
file=`basename $2`
if test -d $file
then
skriptabbruch
else
cntrlfile=$2
fi
else
skriptabbruch
fiBei allen bisherigen Durchläufen, also auch, wenn file ein Ordner ist, läuft das Programm weiter bzw. wird der else-Zweig verwendet. Kann es sein, dass ein String immer als Dateiname interpretiert wird, wenn er über basename selektiert worden ist?

bobafe
29.07.2005, 10:39
Okay, hab den Fehler gefunden. nicht

if test -d $file sondern
if test -d $2 Trotzdem danke für die vielen guten Tipps :)