Я работаю над сценарием для проверки статуса нескольких удаленных хостов MYSQL, заходя на каждый сервер и записывая, был ли логин успешным или нет. Идея состоит в том, чтобы сохранить данные для входа в систему для хостов MYSQL в файле CSV и заставить скрипт пройти через этот файл, войти в систему и записать, если вход был успешным.
Данные для входа в систему MYSQL, хранящиеся в файле CSV, будут иметь следующий вид:
$host,$user,$password
Поскольку я новичок в написании сценариев bash, я не понимаю, как лучше всего подойти к той части, где сценарий проходит цикл через CSV для получения MYSQL. Детали. Может ли кто-нибудь помочь?
В настоящее время я тестировал нижеприведенное для отдельных хостов MYSQL
mysql -h$host -=$user -p$pass -d$db -e exit
if [ "$?" -eq "0" ]
then
echo "Connection established"
else
echo "Connection not established"
fi
Заранее спасибо.
CSV не особо удобно, но вот идет.
while IFS=, read host user pass; do
if mysql -hu$host" -="$user" -p$"pass" -d"$db" -e exit
then
echo "$host: Connection established"
else
echo "$host: Connection not established"
fi
done <file.csv
Обратите внимание, что if
(и, как правило, все операторы управления потоком командной оболочки) уже исследуют $?
за сценой для вас, так что вам очень редко придется проверять это явно в вашей программе. скрипты.
Кроме того, я добавил имя хоста в выходные сообщения, чтобы сделать их более информативными.
Если вы можете вставить входной файл, разделенный пробелами, вы можете удалить IFS=,
и, возможно, также упростить некоторые другие части вашей обработки.
Вы можете использовать встроенную функцию read
и указать ей, что она должна разделять строку запятыми, используя IFS
(разделитель полей ввода) переменная оболочки:
$ cat file
user1,host1,pass1
user2,host2,pass2
$ while IFS="," read -r user host pass; do echo "$user:$host:$pass"; done < file
user1:host1:pass1
user2:host2:pass2
Таким образом, в вашем сценарии вы хотели бы что-то вроде:
while IFS="," read -r user host pass; do
if mysql -h "$host" -u "$user" -p"$pass" -e exit; then
echo "Connection established"
else
echo "Connection failed" fi;
done < file
Вышеупомянутое, однако, сломается, если какой-либо из ваших паролей (или других переменных, но я предполагаю, что только пароли могут иметь эту проблему) содержит запятая. Если это может быть проблемой для вас, вам придется изменить разделитель на что-то другое вместо запятой. Что-то, что никогда не появится в пароле. Например вкладку, а дальше можно сделать:
while IFS=$'\t' read -r user host pass; do
if mysql -h "$host" -u "$user" -p"$pass" -e exit; then
echo "Connection established"
else
echo "Connection failed" fi;
done < file