d.jaeger
Goto Top

Shell kriterium greift nicht richtig

Liebe Grüße in die Runde ....,

ich habe folgende Kontrolle in einem Bash-Script
 if ! kubectl get pods -n "$namespace" | grep -E "moodle-" >/dev/null; then  

Damit möchte ich erreichen, dass im folgenden nur Pods bearbeitet werden, die mit "moodle-" beginnen. Wichtig ist das "-"-Zeichen nach moodle.


Das Script prüft bearbeitet neben
moodle-7fb6
so wie es sein soll aber auch pods die so aussehen
moodlecron-796c6d

Warum ist das so bzw. was mache ich oben in der Abfrage falsch?

Content-Key: 81791772269

Url: https://administrator.de/contentid/81791772269

Printed on: June 20, 2024 at 12:06 o'clock

Member: SlainteMhath
SlainteMhath May 16, 2024 at 11:21:18 (UTC)
Goto Top
Moin,

ich denke du must den "-" mittels "\" maskieren.

Also etwa
... grep -E "moodle\-"  ....  
Member: CamelCase
CamelCase May 16, 2024 updated at 11:35:35 (UTC)
Goto Top
War auch mein erster Gedanke, allerdings ist das - kein besonderes Zeichen für Regex. Und eigentlich klappt es ja wie es soll

user@PC:~$ echo "moodlecasd-asd" |  grep -E "moodle-"  
user@PC:~$ echo "moodle-asd" |  grep -E "moodle-"  
moodle-asd

Das Problem liegt denke ich daran, dass evaluiert wird ob kubectl get pods erfolgreich war, und das reicht dann schon um die gesamte expression true zurückgeben zu lassen

man bräuchte etwas mehr vom script um effektiver helfen zu können. Sieht aus als müsste das "if" vorne weg.

Klappen sollte:

kubectl get pods -n "$namespace" | grep "moodle-"  
Sollte eine liste der entsprechenden Pods ausgeben.
Member: hempel
hempel May 16, 2024 updated at 13:46:12 (UTC)
Goto Top
Zitat von @d.jaeger:
ich habe folgende Kontrolle in einem Bash-Script
 if ! kubectl get pods -n "$namespace" | grep -E "moodle-" >/dev/null; then  
Wieso machst du dann ein Ausrufezeichen vor den Ausdruck um das Ergebnis des Ausdrucks zu negieren? Du willst ja gerade verarbeiten wenn das Ergebnis von grep erfolgreich ist und nicht wenn der Ausdruck nicht vorkommt... 🙃

result=$(kubectl get pods -n "$namespace" | grep '^moodle-')  
if [[ -n "$result" ]]; then   
    echo -e "Pods:\n\n$result"  
else
    echo "Keine passenden pods gefunden!"  
fi 

Gruß
Member: d.jaeger
d.jaeger May 16, 2024 at 13:33:06 (UTC)
Goto Top
Sorry, ... mein Code funktioniert genau umgekehrt .... wie ich es beschrieben habe

   if ! kubectl get pods -n "$namespace" | grep -E "moodle\-" >/dev/null; then  
            echo "Es gibt keinen Pod im Namespace $namespace, der mit moodle- beginnt."  
        else

Das Zeichen "\" führt leider nicht zum Erfolg.

... Gibt es weitere Ideen, wie ich das RegEX aufbauen kann?
Member: hempel
hempel May 16, 2024 updated at 14:05:22 (UTC)
Goto Top
s.o. da stehts doch.
Member: d.jaeger
d.jaeger May 16, 2024 at 14:37:46 (UTC)
Goto Top
Ich habe das so, wie von Dir vorgeschlagen, umgebaut ... es führt leider zu genau dem gleichen Effekt.
Member: hempel
hempel May 16, 2024 updated at 14:47:13 (UTC)
Goto Top
Zitat von @d.jaeger:

Ich habe das so, wie von Dir vorgeschlagen, umgebaut ... es führt leider zu genau dem gleichen Effekt.

Kann ich nicht bestätigen, funktioniert hier wie gewünscht. poste doch bitte mal die Ausgabe von
kubectl get pods -n "xxxxxxxxxxxxxxx" -o name  
Bitte in Codetags

Das sollte die reinen Namen der pods ganz am Anfang der Zeilen auflisten.

Also etwa so
moodle-123323234
moodle-54546456546
whatever-sdfdafsdfsdf
moodlecasd-asd
....
..
.

Und das hier dann nur die Zeilen die mit moodle- beginnen
kubectl get pods -n "xxxxxxxxxxxxxxx" -o name | grep '^moodle-'  

Ausgabe ist dann

moodle-123323234
moodle-54546456546

Wenn bei dir also die Ausgabe des ersten Befehls anders ist als bei uns müssen wir den Grep an deine Ausgabe anpassen.
Member: d.jaeger
d.jaeger May 16, 2024 updated at 15:02:31 (UTC)
Goto Top
So korrekt?
 
result=$(kubectl get pods -n "$namespace" | grep -E "^moodle-" )  
        echo $result 
        if [[ -n "$result" ]]; then  

Die gewünschte Ausgabe:
2024-05-16_17-01
Member: hempel
hempel May 16, 2024 updated at 15:02:10 (UTC)
Goto Top
Lies doch bitte meine Frage nochmal in Ruhe durch! So kommen wir hier nicht weiter wenn du immer nur das machst was du willst aber nicht das was wir uns von dir erbitten zu tun...
Member: hempel
hempel May 16, 2024 updated at 15:40:29 (UTC)
Goto Top
Zitat von @d.jaeger:
Die gewünschte Ausgabe:
Und was bringt folgendes als Ausgabe ?
kubectl get pods -n "xxxxxxxxxxxxxxx"  
Bitte in Codetags posten kein Bild!!


Ansonsten eben mal ein
result=$(kubectl get pods -n "$namespace" | grep -E "\s+moodle-")   
if [[ -n "$result" ]]; then     
    echo -e "Pods:\n\n$result"    
else
    echo "Keine passenden pods gefunden!"    
fi 
Member: d.jaeger
d.jaeger May 16, 2024 at 15:34:56 (UTC)
Goto Top
Die Datei
test.sh
mit dem Inhalt

result=$(kubectl get pods -n "638" | grep -E "\s+moodle-")  
if [[ -n "$result" ]]; then  
    echo -e "Pods:\n\n$result"      
else
    echo "Keine passenden pods gefunden!"      
fi


liefert
E5510:~/bin$ ./test.sh 
Keine passenden pods gefunden!
E5510:~/bin$ 
Member: hempel
hempel May 16, 2024 updated at 15:55:35 (UTC)
Goto Top
Neiiiiiiiiin lies doch bitte alle meine Fragen !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Meine Güte ist das so schwer??

screenshot

Works as designed ...