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-ID: 81791772269

Url: https://administrator.de/forum/shell-kriterium-greift-nicht-richtig-81791772269.html

Ausgedruckt am: 22.12.2024 um 03:12 Uhr

SlainteMhath
SlainteMhath 16.05.2024 um 13:21:18 Uhr
Goto Top
Moin,

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

Also etwa
... grep -E "moodle\-"  ....  
CamelCase
CamelCase 16.05.2024 aktualisiert um 13:35:35 Uhr
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.
13034433319
13034433319 16.05.2024 aktualisiert um 15:46:12 Uhr
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ß
d.jaeger
d.jaeger 16.05.2024 um 15:33:06 Uhr
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?
13034433319
13034433319 16.05.2024 aktualisiert um 16:05:22 Uhr
Goto Top
s.o. da stehts doch.
d.jaeger
d.jaeger 16.05.2024 um 16:37:46 Uhr
Goto Top
Ich habe das so, wie von Dir vorgeschlagen, umgebaut ... es führt leider zu genau dem gleichen Effekt.
13034433319
13034433319 16.05.2024 aktualisiert um 16:47:13 Uhr
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.
d.jaeger
d.jaeger 16.05.2024 aktualisiert um 17:02:31 Uhr
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
13034433319
13034433319 16.05.2024 aktualisiert um 17:02:10 Uhr
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...
13034433319
13034433319 16.05.2024 aktualisiert um 17:40:29 Uhr
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 
d.jaeger
d.jaeger 16.05.2024 um 17:34:56 Uhr
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$ 
13034433319
13034433319 16.05.2024 aktualisiert um 17:55:35 Uhr
Goto Top
Neiiiiiiiiin lies doch bitte alle meine Fragen !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Meine Güte ist das so schwer??

screenshot

Works as designed ...