BASH - для l oop не выполняется внутри цикла while - PullRequest
0 голосов
/ 09 апреля 2020

Это должен был быть простой скрипт, но ... все, что находится внутри для l oop, вообще не выполняется. Если оператор IF равен true, он проверяет оператор for "для pod в oc get pods | grep -i '^pat*' | awk '{print $1}'" и возвращается к началу, пока l oop бесконечно. Если оператор IF ложен, он существует в сценарии. В этом случае оператор if всегда истинен, он должен в списке вывести имя модуля. После того, как я перенаправлю stderr оператора FOR на консоль с помощью 2>, я получу "command substitution: line 5: syntax error near unexpected token newline '"`, учитывая, что для l oop содержит только команду echo

while true; do
  check=$(curl --insecure https:...... | python -mjson.tool |head -2 |grep -i status|awk -F '"' '{print $4}')
  if [ $check == "OK" ]; then
    for pod in `oc get pods | grep -i '^pat*' | awk '{print $1}'`; do
      echo $pod
    done
  else
    exit 0
  fi 
done

Вывод отладки выглядит следующим образом:

+ true
++ python -mjson.tool
++ head -2
++ grep -i status
++ curl --insecure https:...
++ awk -F '"' '{print $4}'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                             Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100   127  100   127    0     0    353      0 --:--:-- --:--:-- --:--:--   354

+ check=OK
+ '[' OK == OK ']'
++ grep -i '^pat*'
++ awk '{print $1}'
++ oc get pods
+ true
++ head -2
++ python -mjson.tool
++ awk -F '"' '{print $4}'
++ curl --insecure https:...

% Total % Received % Xferd Average Speed Time Time Time Current

Dload  Upload   Total   Spent    Left  Speed



 0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100   127  100   127    0     0    415      0 --:--:-- --:--:-- --:--:--   416

+ check=OK
+ '[' OK == OK ']'
++ awk '{print $1}'
++ grep -i '^pat*'
++ oc get pods
+ true
++ python -mjson.tool
++ head -2
++ grep -i status
++ awk -F '"' '{print $4}'
++ curl --insecure https:...



 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100   127  100   127    0     0    423      0 --:--:-- --:--:-- --:--:--   423
100   127  100   127    0     0    423      0 --:--:-- --:--:-- --:--:--   423

+ check=OK
+ '[' OK == OK ']'
++ grep -i '^pat*'
++ awk '{print $1}'
++ oc get pods
+ true
....

1 Ответ

0 голосов
/ 09 апреля 2020

После дальнейшего устранения неполадок выяснилось, что проблема была в grep grep -i '^pat*' из оператора FOR, который не возвращал никаких значений, таким образом пропуская выполнение. После замены шаблона «^ pat *» на правильный, все работает

...