Shellscript case-Pattern innerhalb Variable tut nicht

7even

IT-Kernel
Thread Starter
Mitglied seit
02.07.2003
Beiträge
1.211
Ort
Benztown
Hi zusammen,

ich hab mir gerade ein kleines Scriptchen gebastelt, dass neu angelegte Dateien/Verzeichnisse (im Zs.-spiel mit incron) in definierten anderen Verzeichnissen symlinked.

Die Bedingung für das jeweils andere Verzeichnis lese ich erstmal anhand von Stichworten aus dem Datei-/Verzeichnisnamen (geplant für spätere Versionen Dateiendungen prüfen).

Jetzt aber das Problem:

Wenn ich die Stichworte als Pattern direkt in den case-Zweigen hinterlege funktioniert es:
Code:
case $bla in
   *ABC*|*DEF*|*GHI*)   ln -s blablabla
   *A[0-9]*|*B[a-z]*)   ln -s blablabla2
   *)    echo Alles kaputt..
esac

Wenn ich dieselben Pattern aber vorher in einer Variable speichere, funktioniert der Mist nicht mehr:
Code:
keywords_a='*ABC*|*DEF*|*GHI*'
keywords_b='*A[0-9]*|*B[a-z]*'

case $bla in
   $keywords_a)   ln -s blablabla
   $keywords_b)   ln -s blablabla2
   *)    echo Alles kaputt..
esac


Ich hab auch schon probiert, die Variablen explizit zu expandieren (wenn das jetzt so heißt):
Code:
${keywords_a}


Oder die Stichwörter erst in einer Stringliste zu erfassen und dann mit sed direkt im case-Zweig zu konviertieren:
Code:
*$(echo $keywords_a | sed -e 's/,/*|*/g')*


Auch diese komische Pattern List-Syntax habe ich schon probiert:
Code:
@(ABC|DEF|GHI)
..aber die tut bei mir irgendwie garnicht - weder aus einer Variablen, noch wenn ichs direkt in nen case schreibe. Funzt auch nicht mit if - irgenwas mache ich da wohl falsch.. ;)


Ich habe noch nicht so viel Erfahrung mit Shellscripting, daher hab ich jetzt keine Ahnung was da der Ansatz ist.
Die Google liefert fast immer nur die case-Syntax.... *gg
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
PHP:
keywords_a='*ABC*|*DEF*|*GHI*'
keywords_b='*A[0-9]*|*B[a-z]*'

case $bla in
   "$keywords_a")   ln -s blablabla
   "$keywords_b")   ln -s blablabla2
   *)    echo Alles kaputt..
esac
 
Zuletzt bearbeitet:
das mit den variablen speichern ist ne ganz verrückte sache beim skripten.. so wie du es geschrieben hast könntest du auch gleich " (shift+2)nehmen aber richtig ist dafür ` (shift + rechtes neben ß)

dann sollte es eigentlich gehn, ich hatte auch mal sowas und bin fast verzweifelt ;)

Edit: und anführungsstriche dürfen nicht bei einer variablen sein! also NICHT "$variable1" sonder $variable1
 
Zuletzt bearbeitet:
Hi und danke für die Vorschläge, habe Beides probiert.

Aber tut trotzdem nicht - beim ersten Vorschlag mit den doppelten Anführungszeichen matched das halt einfach weiterhin nicht.
Beim zweiten Vorschlag mit den Backticks aka "Führe-diesen-String-als-Befehl-aus"-Zeichen kommt dann ein *ABC*|*DEF*|*GHI*: command not found.

Letzteres hatte ich auch schon mal versucht fällt mir da grad so spontan ein.. :d
 
hihi,

ähm probier mal bitte aus was die einzelnen variablen ausgeben (macht man am besten mit echo, am ende des skripts) dann siehst du ob auch das drin steht was drin stehn soll.. so mach ich es immer wenn ich mit variablen arbeite und das ergebnis stimmt nicht, dann lass ich mir jede einzele variable ausgeben wenn die stimmen hast du auf jeden fall den fehler schonmal eingegrenzt
 
Jau, klar - das sind ja die ersten Debug-Schritte.. *gg

Das Problem ist halt, dass er das als String ansieht und deshalb vielleicht nicht als Pattern auswertet - wie es jetzt im Echo genau aussieht weiß ich nicht, aber im Debug-Modus des Scripts (-xv) sieht es so aus:
Code:
'*ABC*|*DEF*|*GHI*'
Also eingefasst in die Hochkommata, was ja heißt dass es nen String ist. Aber das ist immer so - egal wie ich die Variable fülle.

---------- Beitrag hinzugefügt um 00:01 ---------- Vorheriger Beitrag war um 00:00 ----------

boooooaaaahrggghhhhh .. jetzt hab ich bestimmt grad den jüngsten "Heute-Post" gemacht!! :haha:
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh