В bash мы хотели бы сделать следующую логику: если переменная "$SLACK" равна TRUE и ${OUTPUT} не равна "mysql: [Warning] Using a password on the command line interface can be insecure", вызовите функцию slack_it ,

Я попробовал более десятка решений, представленных в сообщениях здесь Как отменить тест с помощью регулярных выражений в скрипте bash?, Проверить, соответствует ли строка регулярному выражению в сценарии Bash, но ни одна из них не работает. Может ли любой гуру просветить?

#!/bin/bash

if [ "$SLACK" == "TRUE" ]
   then
        if ! [[ ${OUTPUT} =~ "*mysql: [Warning] Using a password on the command line interface can be insecure*" ]]
            then
                slack_it
        fi
  fi
0
Chubaka 25 Апр 2017 в 01:51

2 ответа

Лучший ответ

Звезды должны быть вне кавычек.

Кроме того, оператор =~ предназначен для регулярных выражений, == для глобусов.

Так:

if ! [[ ${OUTPUT} == *"mysql: [Warning] Using a password on the command line interface can be insecure"* ]]; then
    slack_it
fi
3
wjandrea 24 Апр 2017 в 23:04

Кажется, ваша проблема связана с лидирующим и конечным *. Пытаться:

if ! [[ ${OUTPUT} =~ "mysql: [Warning] Using a password on the command line interface can be insecure" ]]; then
  slack_it
fi
1
codeforester 24 Апр 2017 в 23:00