
각 서버에 로그인하고 로그인 성공 여부를 기록하여 여러 원격 MYSQL 호스트의 상태를 확인하는 스크립트를 작성하고 있습니다. 아이디어는 MYSQL 호스트에 대한 로그인 세부 정보를 CSV 파일에 저장하고 스크립트가 파일을 반복하도록 하고 로그인한 후 로그인 성공 여부를 기록하는 것입니다.
CSV 파일에 저장되는 MYSQL 로그인 데이터는 다음과 같습니다.
$host,$user,$password
Bash 스크립팅을 처음 접했기 때문에 MYSQL 세부 정보를 얻기 위해 CSV를 반복하는 스크립트 부분을 가장 잘 처리하는 방법을 이해할 수 없습니다. 누구든지 도와줄 수 있나요?
현재 각 MYSQL 호스트에 대해 다음을 테스트했습니다.
mysql -h$host -=$user -p$pass -d$db -e exit
if [ "$?" -eq "0" ]
then
echo "Connection established"
else
echo "Connection not established"
fi
미리 감사드립니다.
答え1
組み込み関数を使用し(入力フィールド区切り記号)、シェル変数を使用して行をカンマで区切る必要があることを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
答え2
CSVは特に便利ではありませんが、ここまでです。
while IFS=, read host user pass; do
if mysql -h"$host" -u"$user" -p"$pass" -d"$db" -e exit
then
echo "$host: Connection established"
else
echo "$host: Connection not established"
fi
done <file.csv
if
通常、すべてのシェルのフロー制御ステートメント$?
の背後にあるチェックを実行する方法に注意してください。したがって、スクリプトで明示的にチェックする必要はほとんどありません。
また、より多くの情報を提供するために、出力メッセージにホスト名を追加しました。
スペースで区切られた入力ファイルに入ることができる場合は、それらを削除してIFS=,
処理の他の部分を簡素化できます。