Archiv verlassen und diese Seite im Standarddesign anzeigen : Teile von Strings in Variablen speichern.
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
h2owasser
28.07.2005, 08: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]".
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.
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
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?
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:
# 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?
Okay, hab den Fehler gefunden. nicht
if test -d $file sondern
if test -d $2 Trotzdem danke für die vielen guten Tipps :)
Powered by vBulletin® Version 4.2.0 Copyright ©2013 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.