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

红薯 发布于 2009/05/05 16:17
阅读 217
收藏 0

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

addmailuser 




#!/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 


下面的是删除用户的,因为不少地方跟上面的相似,我就只注释关键的地方咯
delmailuser



#!/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


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



加载中
返回顶部
顶部