PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Letztes Zeichen eines Strings prüfen


Schwarzherz
13.06.2005, 19:13
Hab mir ein Shellscript geschrieben, dass als Parameter einen Pfad (zu einem Ordner nicht zu einer Datei) mitbekommt.
Jetzt will ich aber prüfen ob der Pfad ein "/" dran hat oder nicht. Wenn nein, dann soll ein "/" drangehängt werden.

Hat jemand eine Idee wie ich das letzte Zeichens eines Strings abprüfen kann?


butterkeks
13.06.2005, 20:54
das würde mir auf die Schnelle einfallen:

blah=`echo "$1" | sed 's#\(.\+[^/]\)$#\1/#'`

dieses wird u.U. schneller ausgeführt (hab das jetzt nicht getestet):

blah=`echo "$1" | cut -d '/' -f 1`/

aber sicher nicht die elegantesten Methoden

z3r0x
13.06.2005, 20:56
sorry, kann geloescht werden...

Schwarzherz
13.06.2005, 21:17
Das bringt mir die Fehlermeldung:

/home/eviga/thumbnail: line 25: =/media/extern/: Datei oder Verzeichnis nicht gefunden

Dh. es wurde schon fast korrekt umgewandelt, aber es wird leider ein = davorgesetzt.

Vielleicht könntest du mir das sed skript mal ein bisschen erklären.


Zu deinem zweiten Code-Stück:

Wie soll denn das funktionieren? Du gibst als Feldtrennzeichen / an und willst dann das erste Feld ausgeben?



EDIT: Tja, wenn man $dir='...' schreibt anstatt dir='...' kann das schon nen Fehler geben ;-)

butterkeks
13.06.2005, 21:50
Zu deinem zweiten Code-Stück:

Wie soll denn das funktionieren? Du gibst als Feldtrennzeichen / an und willst dann das erste Feld ausgeben?

ja, war leider etwas kurzsichtg, denn das funktioniert nur bei Pfaden, die nur ein oder kein "/" am Ende enthalten; Ignorier es.

Das sed script sollte mit ein wenig regex Erfahrung begreifbar sein.

Lies dir "man perlretut" durch, falls du Perl zufällig installiert hast, und danach "man sed", um die Unterschiede zwischen der sed und perl syntax in Erfahrung zu bringen (die pelr manpage hat die bessere Einführung, aber dafür lässt sich die Syntax nicht 1:1 auf sed, grep, ... übertragen).

Bei konkreten Fragen kannste ja nochmal fragen.

Gelatine Gurk
25.06.2005, 09:43
mein testskript sieht so aus:
#!/bin/sh
echo "$@" | tr -s '/' '/' | sed -e 's|/$||g' -e 's|$|/|g'

der tr-befehl ersetzt mehrfach vorkommende / durch ein einzelnes /
ist nicht unbedingt fuer die beantwortung deiner frage noetig, aber
vermeidet mehrfache / am ende des strings

aufruf des skripts:
testskript `pwd`/// liefert /cygdrive/d/home/gelatine/
testskript `pwd` liefert /cygdrive/d/home/gelatine/
testskript . liefert ./
testskript /tmp liefert /tmp/

hoffe, das hilft dir ein bisschen weiter