# $1 区服名
# $2 ip
# $3 端口
function exec_sqls()
{
cat SQLS | while read sql ; do
fc=${sql:0:1}
if [ "#" == "$fc" ]; then #被注释的不处理
continue
fi
#sql语句中包含空格,不能再以空格来区分。最后一个空格后的是导出的文件名
exp_file="${sql##* }" #两个#表示正则以最大长度匹配*和一个空格(*后面的空格),截取余下的赋值给exp_file
sql_cmd="${sql%% $exp_file}" #两个%表示从右至左删除%%以后的内容
export_remote_sql $2 $3 "$sql_cmd" $1 "$exp_file"
done
}
# 需要在当前目录下创建服务器列表文件SERVERS,格式为"数据库名 ip ssh端口",如"linuxidc_game_s99 127.0.0.1 22"
# 需要在当前目录下创建sql命令列表文件SQLS,格式为"sql语句 导出的文件",如"select * from user; user.xls"
# 多个sql请注意用;分开,sql必须以;结束
# 文件名中不能包含空格,最终导出的文件为"数据库名_文件名",如"linuxidc_game_s99_user.xls"
mkdir -p $EXP_PATH
cat SERVERS | while read server ; do
fc=${server:0:1}
if [ "#" == "$fc" ]; then #被注释的不处理
continue
fi
name=`echo $server|awk '{print $1}'`
ip=`echo $server|awk '{print $2}'`
port=`echo $server|awk '{print $3}'`
exec_sqls $name $ip $port
done
当前目录下的文件如下,其中SERVERS是服务器列表,里面指定数据库名,ip,ss端口,SQLS则指定sql指令及导出的文件名。这两个文件里以#开头的都不会处理:
linuxidc@:~/桌面/remote_cmd$ ls
remote_cmd.sh SERVERS SQLS
linuxidc@:~/桌面/remote_cmd$ cat SERVERS
linuxidc_game_s99 120.0.0.99 6162
linuxidc_game_s91 120.0.0.91 6162
linuxidc_game_s92 120.0.0.92 6162
linuxidc_game_s93 120.0.0.93 6162
linuxidc_game_s94 120.0.0.94 6162
#linuxidc_game_s91 120.0.0.91 6162
linuxidc@:~/桌面/remote_cmd$ cat SQLS
#select * money from money; money.xls
select * from user; user.xls
linuxidc@:~/桌面/remote_cmd$
到这里,脚本基本完成了要求。