Teile von Strings in Variablen speichern.

B

bobafe

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.
 
Hallo,

Dir hilft man basename und man dirname

hmh
 
bobafe schrieb:
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]".
 
Hm, also wenn ich es so mache (was mit Sicherheit falsch ist),
Code:
dir="/Bereich/Abteilung/Gruppe.txt"
path=dirname $dir
file=basename $dir
echo $path
echo $file
dann 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.
 
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?
 
bobafe schrieb:
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
 
Also ich habe es jetzt so genacht:
Code:
# 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
fi
Bei 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?
 
Okay, hab den Fehler gefunden. nicht
Code:
if test -d $file
sondern
Code:
if test -d $2
Trotzdem danke für die vielen guten Tipps :)
 

Ähnliche Themen

faxen geht nicht mehr

Zurück
Oben