Когда наш сервер подойдет, нам нужно проверить файл, чтобы увидеть, как он настроен.
Мы хотим найти следующую строку в нашем файле /etc/aws/hosts.conf:
MYSQL_ROLE=master
Затем мы хотим проверить, существует ли эта строка, и использовать оператор if / else для запуска одного из двух вариантов в зависимости от того, существует ли строка или нет.
Каков синтаксис BASH для оператора if?
if [ ????? ]; then
#do one thing
else
#do another thing
fi
if
принимает команду и проверяет ее возвращаемое значение.[
это просто команда.if grep -q ... then .... else .... fi
источник
Обратите внимание, что для
PIPE
любой команды или последовательности команд:if PIPE ; then # do one thing if PIPE returned with zero status ($?=0) else # do another thing if PIPE returned with non-zero status ($?!=0), e.g. error fi
Для записи
[ expr ]
- это встроенная оболочка † сокращение дляtest expr
.Поскольку
grep
возвращается со статусом 0 в случае совпадения и ненулевым статусом в случае отсутствия совпадений, вы можете использовать:if grep -lq '^MYSQL_ROLE=master' ; then # do one thing else # do another thing fi
Обратите внимание, что использование
-l
which заботится только о том, чтобы файл имел хотя бы одно совпадение (так что онgrep
возвращается, как только он находит одно совпадение, без необходимости продолжения синтаксического анализа входного файла).† на некоторых платформах
[ expr ]
не является встроенным, но фактически исполняемым/bin/[
(чья последним аргументом будет]
), поэтому[ expr ]
должны содержать пробела вокруг квадратных скобок, и почему он должен следовать одному из списка команд разделителей (;
,&&
,||
,|
,&
, новая линия)источник
-l
является избыточным,grep
возвращается сразу после обнаружения любого совпадения с-q
просто используйте bash
while read -r line do case "$line" in *MYSQL_ROLE=master*) echo "do your stuff";; *) echo "doesn't exist";; esac done <"/etc/aws/hosts.conf"
источник