shell编程实战16

1. 监控cpu使用率

#!/bin/bash

[email protected]

m_mail() {
log=$1
t_s=`date +%s`
t_s2=`date -d "1 hours ago" +%s`
if [ ! -f /tmp/$log ]
then
#创建$log文件
touch /tmp/$log
#增加a权限,只允许追加内容,不允许更改或删除
chattr +a /tmp/$log
#第一次告警,可以直接写入1小时以前的时间戳
echo $t_s2 >> /tmp/$log
fi

#无论$log文件是否是刚刚创建,都需要查看最后一行的时间戳
t_s2=`tail -1 /tmp/$log|awk '{print $1}'`
#取出最后一行即上次告警的时间戳后,立即写入当前的时间戳
echo $t_s>>/tmp/$log
#取两次时间戳差值
v=$[$t_s-$t_s2]
#如果差值超过1800,立即发邮件
if [ $v -gt 1800 ]
then
#发邮件,其中$2为mail函数的第二个参数,这里为一个文件
python mail.py $mail_user "CPU使用率超过90%" "`top -bn1`" 2>/dev/null
#定义计数器临时文件,并写入0
echo "0" > /tmp/$log.count
else
#如果计数器临时文件不存在,需要创建并写入0
if [ ! -f /tmp/$log.count ]
then
echo "0" > /tmp/$log.count
fi
nu=`cat /tmp/$log.count`
#30分钟内每发生1次告警,计数器加1
nu2=$[$nu+1]
echo $nu2>/tmp/$log.count
#当告警次数超过30次,需要再次发邮件; 1次1分钟,共30分钟
if [ $nu2 -gt 30 ]
then
python mail.py $mail_user "CPU使用率超过90%持续30分钟了" "`top -bn1`" 2>/dev/null
#第二次告警后,将计数器再次从0开始
echo "0" > /tmp/$log.count
fi
fi
}

while :
do
cpu_i=`top -bn1 |grep 'Cpu(s):'|sed 's/^%//'|awk -F ' +|%' '{print $8}'`
cpu_u=`echo 100-$cpu_i|bc`

if [ $cpu_u -gt 90 ]
then
m_mail cpu
fi
sleep 60
done

2. 打印子进程

#!/bin/bash

ps -elf > /tmp/pid.txt 
read -p "Please input a pid: " p

if [ -z "$p" ]
then
echo "你没有输入任何pid,请输入一个pid."
exit
fi

if ! grep -qw "$p" /tmp/pid.txt
then
echo "你输入的pid不存在."
exit
fi

扫描二维码关注公众号,回复: 7296277 查看本文章

## 获得给定进程的子进程
get_cpid()
{
p1=$1
ps -elf |awk -v p2=$p1 '$5==p2 {print $4}' > /tmp/$p1.txt
n=`wc -l /tmp/$p1.txt|awk '{print $1}'`
if [ $n -eq 0 ]
then
echo "进程$1下没有子进程."
else
echo "进程$1下的子进程是:"
cat /tmp/$p1.txt
fi
}

get_cpid $p

for c_p in `cat /tmp/$p.txt`
do
get_cpid $c_p
done

3. 给lamp环境增加项目

#!/bin/bash

#网站目录
webdir=/data/wwwroot

#ftp的虚拟用户配置文件目录
ftpudir=/etc/vsftpd/vuuser

#ftp虚拟用户密码文件
ftpuserfile=/root/login

#mysql命令行登录root
mysqlc="/usr/local/mysql/bin/mysql -uroot -pjk1hYUcnt6"

#apache虚拟主机配置文件
httpd_config_f="/usr/local/apache2/conf/extra/httpd-vhosts.conf"

#定义增加MySQL库和用户的函数
add_mysql_user()
{
#生成随机密码
mysql_p=`mkpasswd -s 0 -l 12`
#将密码保存到临时文件里,这里的$pro为用户自定义的项目名字
echo "$pro $mysql_p" >/tmp/$pro.txt

#这里使用嵌入文档的形式(需顶格),将创建用户并授权的命令传递给mysql
$mysqlc <<EOF
create database $pro;
grant all on $pro.* to "$pro"@'127.0.0.1' identified by "$mysql_p";
#下面这个EOF必须要顶格
EOF
}

#定义增加FTP用户的函数
add_ftp_user()
{
ftp_p=`mkpasswd -s 0 -l 12`
echo "$pro" >> $ftpuserfile
echo "$ftp_p" >> $ftpuserfile

#将用户、密码文件转换为密码db文件
db_load -T -t hash -f $ftpuserfile /etc/vsftpd/vsftpd_login.db

cd $ftpudir
#这里的aaa是一个文件,是之前的一个项目,可以作为配置模板
cp aaa $pro
#把里面的aaa改为新的项目名字
sed -i "s/aaa/$pro/" $pro

#重启vsftpd服务
/etc/init.d/vsftpd restart
}

#定义增加apache虚拟主机的函数
config_httpd()
{
#增加网站根目录,和域名保持一致,这里的$dom为用户自定义的域名
mkdir $webdir/$dom
#将网站根目录属主和属组设置为ftp用户;保证ftp用户有写权限
chown vsftpd:vsftpd $webdir/$dom

#用嵌入文档(需顶格),把虚拟主机配置写入到配置文件里
cat >> $httpd_config_f <<EOF
<VirtualHost *:80>
DocumentRoot $webdir/$dom
ServerName $dom
<Directory $webdir/$dom>
AllowOverride none
Require all granted
</Directory>
</VirtualHost>
EOF

#重载apache服务
/usr/local/apache2/bin/apachectl graceful
}

read -p "input the project name: " pro
read -p "input the domain: " dom

add_mysql_user
add_ftp_user
config_httpd

4. 简易计算器

#!/bin/bash

if [ $# -ne 3 ]
then
echo "你给的参数个数不对,应该给3个参数."
exit
fi

if_number()
{
n1=`echo $1|sed 's/[0-9.]//g'`
if [ -n "$n1" ]
then
echo "$1不是数字."
exit
fi

if echo $1|grep -q '^\.'
then
echo "数字$1不合法."
exit
fi
}

if_number $1
if_number $3

case $2 in
+)
echo "$1+$3"|bc
;;
-)
echo "$1-$3"|bc
;;
\*) ## 符号*要脱义
echo "$1*$3"|bc
;;
/)
echo "scale=2;$1/$3"|bc
;;
*)
echo "你给出的格式不对,第二个参数只能是+,-,*,/"
;;
esac

5. 判断文件并计算单词

#!/bin/bash

if [ $# -ne 2 ]
then
echo "请提供两个参数,第一个参数是目录名字,第二个参数是单词"
exit
fi

cd $1
for f in `ls .`
do
if [ -d $f ]
then
if [ -f $f/test.txt ]
then
n=`grep -cw "$2" $f/test.txt`
echo "$1/$f目录下面有test.txt, 该test.txt里面的有$n个$2."
fi
fi
done

6. 打印正方形

#!/bin/bash

while :
do
read -p "Please input a nuber: " n
n1=`echo $n|sed 's/[0-9]//g'`
if [ -n "$n1" ]
then
echo "$n is not a nuber."
continue
else
break
fi
done

for i in `seq 1 $n`
do
for j in `seq 1 $n`
do
echo -n "■ "
done
echo
done

猜你喜欢

转载自www.cnblogs.com/tanzhirong/p/11531033.html