• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

igenus用户申请/删除的shell脚本

发布: 2007-5-25 23:49 | 作者: 未知 | 来源: ChinaUnix.net | 查看: 18次 | 进入软件测试论坛讨论

领测软件测试网
我最早是用wxy先生写的postfix+。。。。 那篇文章建立的mail server,但是imp改动起来不是一般的难,因为每句html代码都是用print方式来写的,看着很费力,改动也不方便。后来参照docn先生的文章,采用sqwebmail来做webmail,但是因为当时没有能够解决中文名附件的问题,所以我改用了igenus来做webmail部分。 因为没有使用vpopmail,所以在管理用户的时候不太方便,正好我初学shell,就写了添加/删除用户的两个shell来练手。本着共享的精神以及请各位大虾指教我的shell编写,我把我写的shell脚本发布出来。因为是针对docn修改后的igenus,而且我自己也略微修改了一些部分,所以可能不能直接套用。我把shell的每个部分都加上了注释,希望能帮助各位朋友看懂。

addmailuser 
[code:1:c6ab2a9532]
#!/bin/sh 

#配置某些参数 
uid=12345 #It's postfix's uid 
gid=12345 #It's postfix's gid 
imapok=1 #Default allow imap 
quota=5000000 # It's value equal to postfix's /etc/main.cf : virtual_mailbox_limit 


#Mysql的控制权限 
mysql_name=用户名 
myrsql_password=密码 

echo 'Enter user name:' 
read name 

if [ "$name" = "" ]; then 
echo 'Must input name!' 
exit 
fi 

echo 'Enter user password:[123456]' #如果不输入密码直接回车,则默认密码为123456 
read password 
if [ "$password" = "" ]; then 
password=123456 
fi 

echo 'Enter user domain:[mail.xx.cn]' #填写domain,默认为mail.xx.cn 
read domain 
if [ "$domain" = "" ]; then 
domain=mail.xx.cn 
fi 

echo 'Enter user home:[/var/mail/]' #mail用户的home目录,默认为/var/mail/ 
read home 
if [ "$home" = "" ]; then 
home=/var/mail/ 
fi 

echo 'Enter user maildir:['$domain'/'$name'/Maildir/]' #maildir目录 
read maildir 
if [ "$maildir" = "" ]; then 
maildir=$domain/$name/Maildir/ 
fi 

echo 'Enter user nickname:' #匿称,如不输入则和用户名相同 
read nickname 
if [ "$nickname" = ""]; then 
nickname=$name 
fi 

#设置id,添加时间等 
id=$name@$domain 
date_add=`date +20%y-%m-%d` 
time_add=`date +%H:%M:%S` 

#全部显示一次上面的参数设置,好核对有写错没 
echo 'id= '$id 
echo 'name= '$name 
echo 'password= '$password 
echo 'domain= '$domain 
echo 'home= '$home 
echo 'maildir= '$maildir 
echo 'nickname= '$nickname 
echo 'imapok= '$imapok 
echo 'date_add= '$date_add 
echo 'time_add= '$time_add 
echo 'quota= '$quota 

#选择确认添加与否 
echo "if under value is right,please input 'y' and Enter:" 
read mychoice 

if [ "$mychoice" = "y" ]; then 

 echo "use mail;" > tmp_addmailuser.sql #将sql命令写到一个临时文件内。。。主要是我菜,不晓得怎么一次用重定向搞定,还有就是这样写调试的时候方便一些 
 echo "INSERT INTO virtual_users (id,home,password,maildir,date_add,time_add,domain,name,uid,gid,imapok,quota, 
pw_gecos) VALUES ('"$id"','"$home"',encrypt('"$password"'),'"$maildir"','"$date_add"','"$time_add"','"$domain"' 
,'"$name"',"$uid","$gid","$imapok","$quota",'"$nickname"');" >> tmp_addmailuser.sql #将sql语句也写进去,这个记得根据自己的数据库名和字段改哦!!! 
 mysql -u$mysql_name -p$mysql_password < tmp_addmailuser.sql #执行 
 rm -rf tmp_addmailuser.sql #删除临时文件 

#下面的语句是建立目录和修改目录权限以及所有者。。。 
 MailUserDir=$home$domain/$name 
  mkdir -p $MailUserDir 
  /usr/lib/courier-imap/bin/maildirmake $MailUserDir/Maildir 
  /usr/lib/courier-imap/bin/maildirmake -q $quota"S"   $MailUserDir/Maildir 
  chmod -R 700 $MailUserDir 
  chown -R postfix:postfix $MailUserDir 
else 
  exit 
fi 
[/code:1:c6ab2a9532]

下面的是删除用户的,因为不少地方跟上面的相似,我就只注释关键的地方咯
delmailuser
[code:1:c6ab2a9532]
#!/bin/sh 

#配置某些参数 
uid=12345 #It's postfix's uid 
gid=12345 #It's postfix's gid 
imapok=1 #Default allow imap 
quota=5000000 # It's value equal to postfix's /etc/main.cf : virtual_mailbox_limit 


#Mysql的控制权限 
mysql_name=用户名 
myrsql_password=密码 

echo 'Enter user name:' 
read name 

if [ "$name" = "" ]; then 
echo 'Must input name!' 
exit 
fi 

echo 'Enter user domain:[mail.xx.cn]'
read domain
if [ "$domain" = "" ]; then
        domain=mail.xx.cn
fi

id=$name@$domain
  
  echo "use mail;" > tmp_delmailuser.sql
  echo "select id,home,maildir,name,pw_gecos from virtual_users where (id='"$id"' and name='"$name"' and domain
='"$domain"');" >> tmp_delmailuser.sql #将sql语句放到临时的文件内

  mysql -u$mysql_name -p$mysql_password < tmp_delmailuser.sql | grep $id > tmp_delmailuser #从临时文件中执行sql语句,并把得到的记录中取得tmp_delmailuser文件内

home=`awk '{ print $2 }' tmp_delmailuser`
maildir=`awk '{ print $3 }' tmp_delmailuser`
nickname=`awk '{ print $5 }' tmp_delmailuser` #把各个需要的字段取出来,这里大家一定要根据自己的mysql的数据库的字段来修改哦
  rm -rf tmp_delmailuser #删除临时文件
if [ "$home" = ""]; then
  echo "No $name in $domain , please check and input again."
  rm -rf tmp_delmailuser.sql
  exit
fi #如果没有取到记录时候的处理

echo 'id= '$id
echo 'name= '$name
echo 'domain= '$domain
echo 'home= '$home
echo 'maildir= '$maildir
echo 'nickname= '$nickname
#显示取得的记录的资料到屏幕上
echo "if under value is right,please input 'y' and Enter:"
read mychoice
#是否确认要删除它
if [ "$mychoice" = "y" ]; then
  echo "use mail;" > tmp_delmailuser.sql
  echo "delete  from virtual_users where (id='"$id"' and name='"$name"' and domain='"$domain"');" >> tmp_delmailuser.sql
  mysql -u$mysql_name -p$mysql_password < tmp_delmailuser.sql
  rm -rf tmp_delmailuser.sql
  MailUserDir=$home$domain/$name
  rm -rf $MailUserDir #删除该条数据库记录和相应的用户目录
else
  exit
fi
[/code:1:c6ab2a9532]

以上的shell写的比较繁琐,但是思路很简单,希望能帮助到各位,也请各位提出意见和帮助完善后可以给我一份.

 bsdxp 回复于:2003-07-07 09:43:14
好同志,辛苦啦。

 bhuang 回复于:2003-07-07 09:46:39
docn修改后的igenus能共享一下吗?

 skylove 回复于:2003-07-07 10:09:47
能呀,我在另外有个帖子内发了地址的
http://218.6.128.194/igenus_docn.tar.gz

 gadfly 回复于:2003-07-07 10:18:05
建议用code 标签把脚本框起来

 skylove 回复于:2003-07-07 10:40:04
不好意思,以前我没用过这些,所以不太懂。已经改正了

 paulwang 回复于:2004-05-20 11:21:38
[quota]
encrypt('"$password"'),
[/quota]

可以直接调用这个函数吗?我的为什么不行啊?

 skylove 回复于:2004-08-20 12:12:35
可以的啊

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网