構成ファイルを作成するには、bash のインデックス付き配列を使用できます。
server[1]=1
type[1]=openvz
ip[1]=1.1.1.1
port[1]=22
user[1]=root
pwd[1]=something
rpath[1]=/home/private/
lpath[1]=s1/
server[2]=2
type[2]=openvz
ip[2]=1.1.1.2
port[2]=22
user[2]=root
pwd[2]=something
rpath[2]=/home/private/
lpath[2]=s2/
次に、それを繰り返します。
source serverlist
for i in $(seq ${#server[@]}); do
sshpass -p ${pwd[$i]} rsync -av --delete ${user[$i]}@${ip[$i]}:${rpath[$i]} /home/backup/${lpath[$i]}
done
それが役に立てば幸い。
アップデート
コマンド ラインで同期するサーバーを指定できるようにする場合は、Bash の位置パラメーターを使用します$1
。
source serverlist
if [ "$1" ]; then
sshpass -p ${pwd[$1]} rsync -av --delete ${user[$1]}@${ip[$1]}:${rpath[$1]} /home/backup/${lpath[$1]}
else
for i in $(seq ${#server[@]}); do
sshpass -p ${pwd[$i]} rsync -av --delete ${user[$i]}@${ip[$i]}:${rpath[$i]} /home/backup/${lpath[$i]}
done
fi
次に、オプションのサーバー番号を最初の引数としてスクリプトを呼び出します。
./script.sh # This would sync all servers in the config file.
./script.sh 2 # This would sync only server number 2.
getoptを使用できますが、はるかに複雑です。
更新 2
getoptを使用する必要がある場合は、スクリプトのrsync部分を Bash 関数に変換します。
source serverlist
function do_sync() {
if [ "$1" ]; then
sshpass -p ${pwd[$1]} rsync -av --delete ${user[$1]}@${ip[$1]}:${rpath[$1]} /home/backup/${lpath[$1]}
else
for i in $(seq ${#server[@]}); do
sshpass -p ${pwd[$i]} rsync -av --delete ${user[$i]}@${ip[$i]}:${rpath[$i]} /home/backup/${lpath[$i]}
done
fi
}
その後、 getoptオプションを引数としてこの関数を呼び出すことができます。
do_sync $getopt_option