花了将近2个小时写,边学习边写这个逻辑,后面就优化(请先自行安装svnversion):
#!/bin/bash
echo "欢迎上使用svn账户配置脚本"
echo "当前版本V1.0.0"
echo "作者:blog.alipay168.cn"
echo "============================="
echo "============================="
echo "==== 君子慎独,不欺暗室 ==="
echo "============================="
echo "============================="
echo -e "\n\n配置流程如下\n0.软件检测\n1.定义目录相关\n2.定义auzhz配置\n3.定义账号密码\n4.定义svnserve权限\n5.定义回调监听hook\n6.配置监听端口\n\n"
echo -e "开始进入配置:\n=====================\n"
svnsoft='svnadmin'
if ! type ${svnsoft} >/dev/null 2>&1; then
echo "${svnsoft} 未安装,请先运行apt-get install subversion 或者yum install subversion安装svn服务"
exit
else
echo -e "${svnsoft} 已安装,可以进行下一步配置\n"
fi
#定义一些基本的变量
tmp_dir_svn="tmpsvn"
rm -rf $tmp_dir_svn
mkdir $tmp_dir_svn
#检测一下目录是否存在了
if [ ! -d $tmp_dir_svn ]; then
echo '目录当前无权限操作'
exit
fi
tmp_file_port="${tmp_dir_svn}/port"
tmp_file_authz="${tmp_dir_svn}/authz"
tmp_file_passwd="${tmp_dir_svn}/passwd"
tmp_file_serve="${tmp_dir_svn}/svnserve.conf"
tmp_file_hook="${tmp_dir_svn}/post-commit"
echo "请输入svn版本控制目录,如/svn/project1/"
read svn_dir
if [ -d "$svn_dir" ]; then
echo "${svn_dir}目录已存在,是否强制删除目录,是输入1,否则终止执行:"
read delc
if [ "$delc" -eq 1 ]; then
echo "正在执行删除${svn_dir}目录..."
rm -rf "$svn_dir"
else
echo "您已取消配置!"
exit
fi
fi
echo "正在创建目录:${svn_dir}"
mkdir -p "$svn_dir"
if [ -d "$svn_dir" ]; then
echo "svn目录创建成功"
else
echo "svn目录创建失败,程序终止"
exit
fi
echo "请输入版本同步目录,如/www/wwwroot/project1/"
read webdir
if [ -d "$webdir" ]; then
echo "${webdir}目录已存在,是否强制删除目录,是输入1,否则终止执行:"
read delcc
if [ "$delcc" -eq 1 ]; then
echo "正在执行删除${webdir}目录..."
rm -rf "$webdir"
else
echo "您已取消配置!"
exit
fi
fi
echo "正在创建目录:${webdir}"
mkdir -p "$webdir"
if [ -d "$webdir" ]; then
echo "svn同步目录创建成功"
else
echo "svn同步目录创建失败,程序终止"
exit
fi
echo -e "===============进入2.配置authz======\n"
setauthz() {
#用户组设置
echo "[groups]" >$tmp_file_authz
echo -e "\n请输入用户组和用户,格式【组名=用户0,用户1,用户2】:"
echo '按下 <CTRL-D> 退出'
echo -n "请输入用户组,如:admin=user1,user2,请继续:"
echo -e "\n"
while read groups; do
echo "${groups}" >>$tmp_file_authz
echo "${groups} 已保存,请继续:"
done
echo -e "\n" >>$tmp_file_authz
echo -e "\n\n\n接下来配置户组权限,rw-读写,w-只写,r-只读,@groupName设置某个用户组权限\n"
echo -e "目录如[/],[/www/web1/dir1/dir22]\n"
echo -e "例如(#后面是注释):\n"
echo "-------example start-----------"
echo -e "[/]#设置一个权路径\n"
echo -e "@group1=rw#给group1用户组读写权限\n"
echo -e "user1=r#给user1设置只读权限\n"
echo -e "@admin=rw#给admin用户组读写权限\n"
echo -e "[/www/wwwroot/web1/test]\n"
echo -e "@test=rw\n"
echo -e"------example end----------\n\n"
echo '按下 <CTRL-D> 退出'
echo -n "请输入权限配置,先目录后用户和权限:"
echo -e "\n"
while read auths; do
echo "${auths}" >>$tmp_file_authz
echo "${auths} 已保存,请继续:"
done
echo "正在保存您的配置,请稍后......"
echo -e "============配置authz完成==============\n"
}
setpwd() {
echo -e "===============进入3.定义账号密码===============\n"
echo "[users]" >$tmp_file_passwd
echo '按下 <CTRL-D> 退出'
echo -n '请输入账户和密码,格式【用户名=密码】: '
echo -e "\n"
while read users; do
echo "$users" >>$tmp_file_passwd
echo "${users} 已保存,请继续以下一个:"
done
echo -e "=============密码设置完成======================\n\n"
}
setsvnconf() {
echo "=========4.定义svnserve权限(自动完成)========="
echo "=== "
echo "=== 请按照提示操作输入 "
echo "=== "
echo "============================================"
echo "[general]" >$tmp_file_serve
echo "anon-access = none" >>$tmp_file_serve
echo "auth-access =write" >>$tmp_file_serve
echo "password-db = passwd" >>$tmp_file_serve
echo "authz-db = authz" >>$tmp_file_serve
echo -e "自动配置为:\n"
cat $tmp_file_serve
echo -e "\n"
echo -e "=========svnserve权限已经自动完成=========\n"
}
sethook() {
echo "=========5.接下来配置hook脚本========="
echo "============================================"
echo "=== "
echo "===这里存放提交后需要执行的脚本命令、提醒等操作======"
echo "===同步svn版本到网站目录如: "
echo "指令:svn update ${webdir} --username [用户名] --password [密码] "
echo "===在如给目录设置权限(更新后将网站目录重新分配拥有者和权限,www:www比较安全,默认是root:root):"
echo -e "指令:chown www:www /web/test -R \n"
echo -e "============================================\n\n"
echo "#!/bin/bash" >$tmp_file_hook
echo "export LANG=\"zh_CN.UTF-8\"" >>$tmp_file_hook
echo '按下 <CTRL-D> 退出'
echo -e "下面的格式:【--username 用户名 --password 用户密码】,如'svn update /www/wwwroot/web1/ --username u1 --password 123456'\n"
echo -n '请输入需要执行的shell脚本命令: '
echo -e "\n"
while read cmds; do
echo "${cmds}" >>"$tmp_file_hook"
echo " $cmds 已保存"
done
echo -e "正在给post-commit文件设置执行权限755...\n"
chmod 755 "$tmp_file_hook"
echo -e "post-commit文件权限分配完成\n"
echo -e "=========hook同步服务配置完成=========\n"
}
setport() {
echo -e "==========6.监听端口配置===========\n"
echo "请输入监听的端口号,如5551:"
read port
if [ $port ]; then
echo "您的端口号是:${port}"
echo "$port" >>$tmp_file_port
else
port=50001
echo "端口未设置,默认50001"
fi
echo -e "==========您的配置已经完成===========\n"
}
#开始配置
startconf() {
echo -e "\n\n==========开始配置==========\n\n"
echo -e "==============自动执行中=============\n"
echo -e "==============正在创建目录${svn_dir}=====\n"
svnadmin create "$svn_dir"
if [ ! -d "$svn_dir" ]; then
echo "创建${svn_dir}失败,已终止配置!"
else
echo -e "==============创建目录${svn_dir}=====√\n"
fi
cp $tmp_file_authz "${svn_dir}/conf/"
echo -e "==============copy file ${tmp_file_authz}=====√\n"
cp $tmp_file_passwd "${svn_dir}/conf/"
echo -e "==============copy file ${tmp_file_passwd}=====√\n"
cp $tmp_file_serve "${svn_dir}/conf/"
echo -e "==============copy file ${tmp_file_serve}=====√\n"
cp $tmp_file_hook "${svn_dir}/hooks/"
echo -e "==============copy file ${tmp_file_hook}=====√\n"
echo -e "==============文件配置完成,接下来配置监听=============\n"
#svnserver -d -r /svn/test --listen-port 123456 #监听123456这个端口,需要提前从服务器放出来
svnserver -d -r "${svn_dir}" --listen-port "${port}"
echo -e "==============监听已启动,接下来检出一次测试=============\n"
echo -e "请输入本服务器的IP地址:"
read ipaddr
if [ -z $ipaddr ]; then
echo "请输入本服务器的IP地址:"
read ipaddr
if [ -z $ipaddr ]; then
echo "非常感谢您的不配做,接下来的工作交给您自己操作了,再见"
exit
else
echo -e "正在检出....\n"
fi
else
echo -e "正在检出....\n"
fi
echo "svn checkout svn://${ipaddr}:${port}${webdir} --username u1 --password userpwd"
echo "还是要你自己来啊,最后检出一下哈,按照上面的格式检出到目标网站,祝您生活愉快"
}
setauthz
setpwd
setsvnconf
sethook
setport
startconf
复制代码
运行图:
配置后:
最后:
自己不是专业搞linux的,我只是一个phper,偶尔需要照顾一下服务器,摸鱼时间想写这个svn配置的shell,所以就拿自己的想法用shell写了一下,自己测试可行!
后期优化:一些权限的判断、监听端口的查询、日志记录等。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END