У меня есть функция is_mysql_db(), чтобы определить, является ли установленная база данных на сервере сервером mysql. Поэтому в идеале код в основном теле должен вызывать функцию, чтобы определить, следует ли считать этот сервер сервером mysql или нет.
Пробовал в конце функции ставить двойные скобки, одинарное "=", использовать или не использовать переменную для сравнения. У меня, честно говоря, нет идей, и я хотел бы, чтобы этот код выглядел как можно более понятным, так как это лишь небольшая его часть.
Ниже моего примера кода:
#!/bin/bash
is_mysql_db(){
yum_mysql_out=$(yum list installed | grep mysql-community | awk '{ print $1 }' | tail -n1)
[ $yum_mysql_out == "mysql-community-server.x86_64" ]
}
if [ is_mysql_db ]
then
echo "Installed"
else
echo "Not Installed"
fi
Я ожидаю, что если установлен пакет MySQL yum, он обнаружит его и вернет, что пакет установлен, и если он не вернет Not Installed. Простой, но не очень, видимо.
И похоже, что вы могли бы упростить все это как if yum list installed | grep "mysql-community-server.x86_64"; then echo Installed; else echo "Not Installed"; fi
Неправильная не функция оболочки, а ваш вызов.
Помещение строки в квадратные скобки не запускает эту команду, а просто проверяет, не пуста ли сама строка.
Не помещайте функцию в квадратные скобки, и она будет выполняться как команда.
Пример:
$ if [ false ] ; then echo "false is true??"; else echo "false is false as expected" ; fi
false is true??
$ if false ; then echo "false is true??"; else echo "false is false as expected" ; fi
false is false as expected
Кстати, ваша функция может быть проще:
is_mysql_db(){
yum list installed | grep -q mysql-community-server
}
Или даже использовать rpm напрямую, чтобы yum не перезагружал свои индексы пакетов:
is_mysql_db(){
rpm --quiet -q mysql-community-server
}
Действительно, я удаляю скобки при вызове функции и теперь отлично работаю, спасибо!
Я обновил ваше предложение, используя ваш rpm, и он отлично работает. Спасибо еще раз.
Круто, так должно быть немного быстрее.
Вам нужно удалить скобки в if.
if command; then ...
выполнит блокthen
, если команда завершается с 0.[...]
полезен, когда вам нужно использовать такие операторы, как=
/==
, которые вы используете в функции.