shell脚本文件

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图个吉利儿

欢迎大家一起学习!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值