ip过滤脚本
#!/bin/bash
grep "^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$" /root/sh/ip.txt > /root/sh/ip_test1.txt
#先通过正则,把明显不符合规则的ip过滤,把结果保存在ip_test1.txt临时文件中
line=$(wc -l /root/sh/ip_test1.txt | awk '{print $1}')
#统计test1中有几行IP
echo "" > /root/sh/ip_test.txt
#清空最终数据文件
for (( i=1;i<=$line;i=i+1 ))
#有几行IP,循环几次
do
cat /root/sh/ip_test1.txt | awk 'NR=='$i'{print}' > /root/sh/ip_test2.txt
#第几次循环,就把第几行读入ip_test2.txt文件(此文件中只有一行IP)
a=$(cat /root/sh/ip_test2.txt | cut -d '.' -f 1)
b=$(cat /root/sh/ip_test2.txt | cut -d '.' -f 2)
c=$(cat /root/sh/ip_test2.txt | cut -d '.' -f 3)
d=$(cat /root/sh/ip_test2.txt | cut -d '.' -f 4)
#分别把IP地址的四个数值分别读入变量a,b,c,d
if [ "$a" -lt 1 -o "$a" -gt 255 ]
#如果第一个数值小于1或大于等于255
then
continue
#则退出本次循环
fi
if [ "$b" -lt 0 -o "$b" -gt 255 ]
then
continue
fi
if [ "$c" -lt 0 -o "$c" -gt 255 ]
then
continue
fi
if [ "$d" -lt 0 -o "$d" -gt 255 ]
then
continue
fi
#依次判断四个IP数值是否超出范围,如果超出,退出本次循环
cat /root/sh/ip_test2.txt >> /root/sh/ip_test.txt
#如果四个IP数值都符合要求,则把合法IP记录在文件中
done
rm -rf /root/sh/ip_test1.txt
rm -rf /root/sh/ip_test2.txt
#删除临时文件
ip探测丢包率获取脚本
#!/bin/bash
cd /root/
for i in $(cat ip.txt)
do
ping -c 3 $i > /tmp/message.txt
vaule=$(cat /tmp/message.txt | grep ",.*p" | cut -d "," -f 3 | awk '{print $1}')&>/dev/null
date=$(date +%F)
echo "$date:$i:PacketLossRate:$vaule" >> /root/reault.txt
done
rm -rf /tmp/message.txt
备份MySQL数据库脚本
#!/bin/bash
#备份MySQL数据库
#Author:yyz
ntpdate asia.pool.ntp.org &>/dev/null
#同步系统时间
date=$(date +%y%m%d)
#把当前系统时间按照"年月日"格式赋予变量date
size=$(du -sh /var/lib/mysql)
#统计MySQL数据库的大小,并赋予size变量
if [ -d /tmp/dbbak ]
then
#如果判断为真,执行以下脚本
echo "Date:$date! " > /tmp/dbbak/dbinfo.txt
#把当前日期写入临时文件
echo "Data size:$szie" >> /tmp/dbbak/dbinfo.txt
#把数据库大小写入临时文件
cd /tmp/dbbak
#进入备份目录
tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/null
#打包压缩数据库与临时文件,把所有输出丢入垃圾箱
rm -rf /tmp/dbbak/dbinfo.txt
#删除临时文件
else
mkdir /tmp/dbbak
#如果判断为假,则建立备份目录
echo "Date:$date!" > /tmp/dbbak/dbinfo.txt
#把当前日期写入临时文件
echo "Data size:$szie" >> /tmp/dbbak/dbinfo.txt
#把数据库大小写入临时文件
cd /tmp/dbbak
#进入备份目录
tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/null
#打包压缩数据库与临时文件,把所有输出丢入垃圾箱
rm -rf /tmp/dbbak/dbinfo.txt
#删除临时文件
fi
服务器SUID和GUID文件检测脚本
#!/bin/bash
find / -perm -4000 -o -perm -2000 >/tmp/suid.check
for i in $(cat /tmp/suid.check)
do
grep $i /root/suid.list > /dev/null
if [ "$?" != “0" ]
then
echo $i isn't listfiel! >> /root/suid_log_$(date +%F)
fi
done
rm -rf /tmp/suid.check
简单四则运算脚本
#!/bin/bash
#字符界面加减乘除计算器
read -t 30 -p "Please input num1: " num1
read -t 30 -p "Please input num2: " num2
#通过read命令接收要计算的数值,并赋予变量num1和num2
read -t 30 -p "Please input a operator: " ope
#通过read命令接收要计算的符号,并赋予变量ope
if [ -n "$num1" -a -n "$num2" -a -n "$ope" ]
#第一层判断,用来判断num1、num2和ope中都有值
then
test1=$(echo $num1 | sed 's/[0-9]//g')
test2=$(echo $num2 | sed 's/[0-9]//g')
#定义变量test1和test2的值为$(命令)的结果
#后续命令作用是,把变量test1的值替换为空。如果能替换为空,证明num1的值为数字
#如果不能替换为空,证明num1的值为非数字。我们使用这种方法判断变量num1的值为数字
#用同样的方法测试test2变量
if [ -z "$test1" -a -z "$test2" ]
#第二层判断,用来判断num1和num2为数值
#如果变量test1和test2的值为空,则证明num1和num2是数字
then
#如果test1和test2是数字,则执行以下命令
if [ "$ope" == '+' ]
#第三层判断用来确认运算符
#测试变量$ope中是什么运算符
then
value=$(( $num1 + $num2 ))
#如果是加号则执行加法运算
elif [ "$ope" == '-' ]
then
value=$(( $num1 - $num2 ))
#如果是减号,则执行减法运算
elif [ "$ope" == '*' ]
then
value=$(( $num1 * $num2 ))
elif [ "$ope" == '/' ]
then
value=$(( $num1 / $num2 ))
else
echo "Please enter a valid symbol"
#如果运算符不匹配,提示输入有效的符号
exit 10
#并退出程序,返回错误代码10
fi
else
#如果test1和test2不为空,说明num1和num2 不是数字
echo "Please enter a valid value"
#则提示输入有效的数值
exit 11
#并退出程序,返回错误代码11
fi
else
echo "qing shuru neirong"
exit 12
fi
echo " $num1 $ope $num2 : $value"
#输出数值运算的结果
批量用户删除脚本
#方法一:
#!/bin/bash
name=$( cat /etc/passwd | grep "/bin/bash" | grep -v root | cut -d ":" -f 1)
for i in $name
do
userdel -r $i &>/dev/null
done
#方法二
#!/bin/bash
username=$(cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN{FS=":"}$3>500{print $1}')
for i in $username
do
userdel -r $i &>/dev/null
done
echo "Delete user success!"
批量用户添加脚本
#!/bin/bash
#批量添加指定数量的用户
read -t 30 -p "Please input user name:" name
#让用户输入用户名
read -t 30 -p "Please input the number of users:" num
#让用户输入添加用户的数量
read -t 30 -p "Please input the passwd of users:" pass
#让用户输入初始密码
if [ ! -z "$name" -a ! -z "$num" -a ! -z "$pass" ]
#判断三个变量不为空
then
y=$(echo $num | sed 's/[0-9]//g')
if [ -z "$y" ]
then
for ((i=0;i<=$num;i++))
#循环num变量指定的次数
do
/usr/sbin/useradd $name$i &>/dev/null
#添加用户
echo $pass | /usr/bin/passwd --stdin $name$i &>/dev/null
#给用户设定初始密码
chage -d 0 $name$i
#设置用户首次登陆修改密码
done
else
echo "Your input number is error!"
echo "Create user fail!"
fi
fi
批量自动解压脚本
#!/bin/bash
cd /root/tar
ls *.tar.gz > ls.log
for i in $(cat ls.log)
do
tar -zxf $i &>/dev/null
done
rm -rf /root/tar/ls.log
邮件过滤脚本
!/bin/bash
read -t 30 -p "Please inout mail filename:" filename
if [ -f "$filename" ]
then
grep -E "[0-9a-zA-Z_]+@[0-9a-zA-Z_]+(\.[0-9a-zA-Z_]+){1,3}" $filename
else
echo -e "\nError! your input isn't file!"
exit 10
fi
判断内存使用状态
#!/bin/bash
disk_size=$(df / | awk '/\//{print $4}')
mem_size=$(free | awk '/Mem/{print $4}')
if [ $disk_size -le 51200 -a $mem_size -le 10240 ]
then
mail -s "warning" root <<EOF
Insufficient resources,资源不足
EOF
fi
猜数字
#!/bin/bash
num=$[RANDOM%100+1]
echo "$num"
while [ 1 ]
do
read -p "计算机生成了1-100的数字,你猜:" cai
if [ -n "$cai" ];then
a=$(echo $cai | sed 's/[0-9]//g')
if [ -z "$a" ];then
if [ $cai -eq $num ];then
echo "恭喜你!猜对了!"
exit 10
elif [ $cai -gt $num ];then
echo '猜"大"了! '
else
echo '猜"小"了! '
fi
elif [ $a == "q" ];then
exit 10
else
echo "您的输入有误!请重新输入!"
fi
else
echo -e "请输入\"q\"退出!"
fi
done
自动重启apache脚本
#!/bin/bash
port=$(nmap -sT 192.168.226.3 | grep "tcp" | grep "http" | awk '{print $2}')
#使用nmap命令扫描服务器,并截取apache服务的状态,赋予变量port
if [ "$port" == "open" ]
#如果变量port的值是"open"
then
echo "$(date) httpd is ok! " >> /tmp/autostart-acc.log
#则证明apache正常启动,在正常日志中写入一句话即可
else
/etc/rc.d/init.d/httpd start &>/dev/null
#否则证明apache没有启动,自动启动apache
echo "$(date) resetart httpd!! " >> /tmp/autostart-err.log
#并在错误日志记录自动启动apache的时间
fi