2017-09-12 1 views
0

프로그래밍에 익숙하지 않고 약간의 도움이 필요합니다.bash 루프 mysql은 변수를 변수로 다중 출력합니다.

은 내가 쉘 스크립트를 실행할 때 각 도메인으로 지금까지 사용자를 출력 이하 나에게

echo 2>&1 " 3cmd put -r /home/$ftpuser/backups/ s3://bucket-backup/$domainname/" 

아래의 출력을 제공하기 위해 'ftpuser'와 '도메인'열 통해 MySQL 데이터베이스 및 루프에 액세스해야

0,123,714 때문이다
3cmd put -r /home/user1/backups/ s3://bucket-backup/domain1.com/ 
3cmd put -r /home/user1/backups/ s3://bucket-backup/domain2.com 
3cmd put -r /home/user1/backups/ s3://bucket-backup/domain3.com/ 
3cmd put -r /home/user2/backups/ s3://bucket-backup/domain1.com/ 
3cmd put -r /home/user2/backups/ s3://bucket-backup/domain2.com/ 
3cmd put -r /home/user2/backups/ s3://bucket-backup/domain3.com/ 

그렇게

에 결과 메신저 찾고

여기에 코드

!/빈/bash는을이다

filelines=username=$(mysql -h localhost -u root -p -ss -e "use users; SELECT ftpuser FROM users; ") 

filelines2=username=$(mysql -h localhost -u root -p -ss -e "use users; SELECT domain FROM users; ") 

echo Start 

for username in $filelines ; do 

for domainname in $filelines2 ; do 

echo 2>&1 " 3cmd put -r /home/$username/backups/ s3://bucket-backup/$domainname/" 

done 
done 

답변

0

스토어 번 인덱스를 통해 별도의 bash는 배열과 루프에서 filelines, filelines2의 요소와 같이.

arr1=($filelines) 
arr2=($filelines2) 
for i in ${!arr1[@]} 
do 
    echo 2>&1 " 3cmd put -r /home/${arr1[$i]}/backups/ s3://bucket-backup/${arr2[$i]}/" 
done 

출력 :

3cmd put -r /home/user1/backups/ s3://bucket-backup/domain1/ 
3cmd put -r /home/user2/backups/ s3://bucket-backup/domain2/ 
3cmd put -r /home/user3/backups/ s3://bucket-backup/domain3/ 
3cmd put -r /home/user4/backups/ s3://bucket-backup/domain4/ 

당신은 루프 구문을 이해하기위한 Looping over arrays, printing both index and value을 참조 할 수 있습니다.

+0

Worked GREAT !! 고맙습니다. –

+0

당신은 welcome.could u pls 답을 가장 좋은 것으로 표시합니다. 감사합니다 –

+0

그냥 했어요. 다시 한 번 감사드립니다. –

관련 문제