bashスクリプト変数を取得するためにファイルを繰り返します。

bashスクリプト変数を取得するためにファイルを繰り返します。

각 서버에 로그인하고 로그인 성공 여부를 기록하여 여러 원격 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

おすすめ記事