shell脚本学习心得

postfix的邮件配额是在一个maildirsize的文件中表示的,该文件第一行用XXXXXXS来表示限额(以字节数为单位)
面试原题目我记的不准确了。大概就是在一个目录里面搜索用户的quota文件,然后找出配额在500到1500之间的用户,并给用户增加2000的配额
既然记不清楚了,干脆按照自己的想法来写脚本吧

先把算法描述出来
首先在邮件储存目录里面查找maildrisize文件,然后把文件的路径信息记录到一个文件中。
从该文件中逐行读取maildirsize的内容,对第一行的信息进行处理,并和要求的配额来比较,如果满足要求,就修改该配额文件,然后继续操作下一个文件。

找出所有的maildirsize并存到quota文件
find /home -name maildirsize -exec ls -l {} \; > quota

把路径信息拿出来放到新的文件quota
cat quota | awk '{print $9}' > quota1
上面2个命令可以合并到一个命令中
find /root -name maildirsize -exec ls -l {} \; | awk '{print $9}' > quota
 
 
接下来就要对quota处理
for i in `cat quota`
do size=`head -n1 $i | sed 's/S//'`

  if (( $size > 500 )) && (( $size < 1500 ))
    then size=`expr $size + 2000`
    sed -i "1s/.*/${size}S/" $i
  fi

done

 
 
这里是一个循环,
从quota文件输出所有的行作为循环条件
i为自变量。表示在quota文件中的行数,
当i=1时。处理第一行,直到i=空,循环结束
do后面是循环要作的事情
首先从maildirsize文件中读取第一行,存储到size变量中,
因为后面带了个S,所以还需要用sed命令把S替换掉
然后进行比较命令,因为 $size 为字符串,所以这里要双()括号,不能用[]
对满足条件的size进行增加操作, expr $size + 2000
这里要用expr命令才能操作字符串。直接 size=size + 2000 不成功
然后对原来的maildirsize文件进行替换操作。
这里$i变量就表示当前所在行的maildirsize路径,例如
/home/domains/abc/Maildir/maildirsize
只需要替换第一行就可以了
1s表示第一行,.*表示匹配整行,不要忘记补上末尾的S
另外,这里是用变量来替换,直接用$size是不行的,会发现文件的第一行变成了$size
解决办法就是 把原来的单引号换成双引号,同时把变量用{}括起来,即${size}
 
 
在CU看帖子的时候发现一个上周没有想到的东西,上周的mail自动安装脚本,把编译时候产生的信息重定向到log了。但是屏幕就没有任何提示了。似乎很无聊。今天发现可以同时输出到文件和屏幕
 
command  |  tee -a  logfile
 
举例:
./configure --prefix=/usr/local/httpd | tee -a httpd.log
 
这样就会在后台记录log。同时屏幕上依然显示编译的信息。
 
 

你可能感兴趣的:(shell,职场,休闲)