Joern wrote:Jetzt würde ich gern wissen, ob in der Variablen mindestens ein Slash enthalten ist. Wie bewerkstellige ich das ?
Shells arbeiten zeilen- und wortweise. Wenn Du zeichenweise arbeiten möchtest ist das ein sicherer Indikator für "Ich hätte perl verwenden sollen."
Dennoch ist Dein Problem in Shell lösbar. Sei
kris@linux:~> strslashed="a/b"
kris@linux:~> strunslashed="abc"
Lösung a:
kris@linux:~> case "$strslashed" in
> */*) echo "slashed";;
> *) echo "unslashed";;
> esac
slashed
kris@linux:~> case "$strunslashed" in
> */*) echo "slashed";;
> *) echo "unslashed";;
> esac
unslashed
Diese Lösung verändert keine systemkritischen Variablen und setzt nur interne Shellkommandos ein. Sie ist die empfohlene Lösung.
Lösung b:
shell> OFS="$IFS"
shell> IFS=/
shell> set -- $slashed
shell> num=$#
shell> IFS="$OFS"
shell> echo $num
2
Mithin kannst Du hier
if [ "$num" -gt 1 ]
then
echo "slashed"
else
echo "unslashed"
fi
Diese Lösung verändert die systemkritische Variable IFS, aber nur temporär. Sie überschreibt $@, $* und $#. Sie bestimmt aber in einem arbeitsgang und unter ausschließlicher Verwendung von internen Kommandos die absolute Anzahl der Slashes ($num - 1).
Lösung c:
kris@linux:~> testname=$(basename $slashed)
kris@linux:~> if [ "$testname" != "$slashed" ]
> then
> echo "slashed"
> else
> echo "unslashed"
> fi
slashed
Diese Lösung verwendet das externe Kommando basename, ist also langsam.
Es existieren noch weitere Lösungen, aber diese sind alle schlechter als die oben gezeigten Lösungen.