
나는 모든 서버에 로그인하고 로그인 성공 여부를 기록하여 여러 원격 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=,
있으며 아마도 처리의 다른 부분도 단순화할 수 있습니다.