shell脚本案例(三)
1 检测httpd端口
是否存在 如果不存在就发送邮件并重启服务
#!/bin/bash
#检测httpd80端口服务
email=tffsndbb@163.com
line=`netstat -lntp|grep ':80'|grep 'httpd'|wc -l`
if [ $line -ne 0 ]
then
echo "this is no problem"
else
echo "httpd端口出现问题,请及时解决" | mail -s "httpd端口问题" $email
/usr/bin/systemctl restart httpd.service
sleep 5
line=`netstat -lntp|grep ':80'|grep 'httpd'|wc -l`
if [ $line -ne 0 ]
then
echo "httpd端口问题已经解决了" | mail -s "httpd端口问题" $email
fi
fi
2 检测主机磁盘使用率
如果超过90%就发送邮件
#!/bin/bash
email=tffsndbb@163.com
ip=`ifconfig ens32|grep "inet"|awk '{print $2}'|head -n 1`
space=`df -h|grep ""/dev/mapper/centos-root|awk '{print int($5)}'`
#echo "$ip"
#echo "$space"
if [ $space -gt 90 ]
then
echo "$ip 服务器磁盘空间使用率已经超过90%,请及时处理"| mail -s "$ip使用率" $email
else
exit 0
fi
3 获取随机数字或字符串
8位随机数字
8位随机数字
#利用date函数输出纳秒获得随机数
date +%N |cut -c 1-8
echo $RANDOM |cksum |cut -c 1-8
8位随机字符串
8位随机字符串
echo $RANDOM|md5sum|cut -c 3-11
echo $RANDOM|md5sum|cut -c 4-12
8位随机数和字符串
8位随机数和字符串
cat /dev/urandom | head -n 10 | md5sum | head -c 8
cat /proc/sys/kernel/random/uuid|cut -d "-" -f 5|cut -c 1-8
mkpasswd -s 0 -l 8
4 检测主机存活情况
第一种读取文件ip
#!/bin/bash
ipfile=/root/shell/ip.txt
upfile=/root/shell/up.txt
downfile=/root/shell/down.txt
for i in `cat $ipfile`
do
ping -c 3 $i &>/dev/null
if [ $? -eq 0 ]
then
echo "$i is up" >> $upfile
else
echo "$i is down" >> $downfile
fi
done
第二种范围ip
#!/bin/bash
ip=192.168.64.
for i in ${ip}{135..140}
do
ping -c 3 $i &>/dev/null
if [ $? -eq 0 ]
then
echo "$i is up"
else
echo "$i is down"
fi
done
第三种定义函数
#!/bin/bash
tffping(){
ping -c 3 $1 &>/dev/null
if [ $? -eq 0 ]
then
echo "$1 is up"
else
echo "$1 is down"
fi
}
ip=192.168.64.
for i in ${ip}{135..140}
do
tffping $i &
done
& 后台运行
$1 第一个参数
5 批量创建用户
1 固定用户
#!/bin/bash
#创建10个用户,并分别设置密码,密码要求10位且包含大小写字母以及数字,最后需要把每个用户的密码存在指定文件中
for i in `seq 01 10`
do
useradd user$i
pwd=`mkpasswd -s 0 -l 10`
echo "$pwd" | passwd --stdin user$i
echo "user$i $pwd" >> /tmp/userpassword
echo "$i"
done
mkpasswd 需要安装 百度一下
2 读取用户文件 创建用户 赋予密码
[root@docker135 shell]# cat user.txt
lyf
wyf
cxk
wrz
ndy
[root@docker135 shell]# pwd
/usr/local/shell
#!/bin/bash
#创建个用户,并分别设置密码,密码要求8位且包含大小写字母以及数字,最后需要把每个用户的密码存在指定文件中
passwdfile=/tmp/passwdfile/file
chmod 400 $passwdfile
userfile=/usr/local/shell/user.txt
for i in `cat $userfile`
do
id $i &>/dev/null
if [ "$?" == "0" ]
then
echo "用户已经存在"
userdel -r "$i" &>/dev/null #如果不想删除用户 就注释一下吧
else
# echo "用户不存在"
useradd $i
passwd=`mkpasswd -s 0 -l 8`
# echo "$passwd"
echo $passwd |passwd --stdin $i &>/dev/null
echo "用户名:$i 密码:$passwd" >> $passwdfile
echo "$i用户创建成功"
fi
done
3 读取用户和密码文件
[root@docker135 shell]# cat user_passwd.txt
lhn lhnqqq
wex wexqqq
wgz wgzqqq
[root@docker135 shell]#
#!/bin/bash
file=/root/shell/user_passwd.txt
while read line
do
user=`echo "$line"|awk '{print $1}'`
passwd=`echo "$line"|awk '{print $2}'`
if [[ `cat $file | wc -l` -eq 0 ]];then
echo "文件是空的"
else
useradd $user
echo $passwd | passwd --stdin $user &>/dev/null
if [ $? -eq 0 ];then
echo "user is create"
fi
fi
done<$file
6 检测内存使用率
#!/bin/bash
ip=`ifconfig ens32|grep "inet"|awk '{print $2}'|head -n 1`
email=tffsndbb@163.com
total=$(free -m | sed -n '2p' | awk '{print $2}')
used=$(free -m | sed -n '2p' | awk '{print $3}')
free=$(free -m | sed -n '2p' | awk '{print $4}')
shared=$(free -m | sed -n '2p' | awk '{print $5}')
buff=$(free -m | sed -n '2p' | awk '{print $6}')
cached=$(free -m | sed -n '2p' | awk '{print $7}')
rate=`echo "scale=2;$used/$total" | bc | awk -F. '{print $2}'`
echo -e "total\tused\tfree\tshared\tbuffer\tavailable"
echo -e "${total}M\t${used}M\t${free}M\t${shared}M\t${buff}M\t${cached}M\nrate:${rate}%"
if [ $rate -ge 80 ]
then echo "$ip 物理内存超过80%,请马上处理" | mail -s "$ip 物理内存" $email
ps aux | grep -v USER | sort -rn -k4 | head
fi
scale=2 设小数位,2 代表保留两位:
bc 命令可以很方便的进行浮点运算
7 mysql分库分表备份
#!/bin/bash
user="root"
passwd="tffnbb"
mysql_cmd="mysql -u$user -p$passwd"
mydump="mysqldump -u$user -p$passwd --lock-tables=0"
for dbname in `$mysql_cmd -e "show databases;"|grep -Ev "Database|schema"`
do
#echo "$dbname"
[ -d /opt/$dbname ] || mkdir -p /opt/$dbname
for tabname in `$mysql_cmd -e "show tables from $dbname"|sed 1d`
do
#echo "$tabname"
$mydump $dbname $tabname > /opt/$dbname/${tabname}_$(date +%F).sql
done
done
使用mysql的-e参数可以执行各种sql的(创建,删除,增,删,改、查)等各种操作 。
mysql -hhostname -Pport -uusername -ppassword -e 相关mysql的sql语句,不用在mysql的提示符下运行mysql,即可以在shell中操作mysql的方法。