博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux Shell常用脚本整理
阅读量:5377 次
发布时间:2019-06-15

本文共 13874 字,大约阅读时间需要 46 分钟。

轮询检测Apache状态并启用钉钉报警◆

#!/bin/bashshell_user="root"shell_domain="apache"shell_list="/root/ip_list"shell_row=`cat $shell_list |wc -l`function trans_text(){text=$1curl 'https://oapi.dingtalk.com/robot/send?access_token=b4fcf5862088a1bc7f2bf66a' -H'Content-Type: application/json' -d'{      #指定钉钉机器人hook地址            "msgtype": "text",             "text": {            "content": "'"$text"'"        }, }'}function apache_check_80(){    ip=$1    URL="http://$ip/index.html"    HTTP_CODE=`curl -o /dev/null -s -w "%{http_code}" "${URL}"`    if [ $HTTP_CODE != 200 ]        then            trans_text "                            =================================================================                                \n $ip Apache 服务器状态异常,网页返回码: '"$HTTP_CODE"' 请及时处理 ! \n                                ================================================================= \n"    fi}while truedoshell_list="/root/ip_list"shell_row=`cat $shell_list |wc -l`    for temp in `seq 1 $shell_row`    do            Ip_Addr=`cat $shell_list |head -n $temp |tail -n 1`        apache_check_80 $Ip_Addr    done    sleep 10done

一台监控主机,一台被监控主机。被监控主机分区使用率大于80%,就发告警邮件。放到crontab里面,每10分钟执行一次。

#!/bin/bashFSMAX="80"     remote_user='root'  remote_ip=(IP地址列表)  ip_num='0'      while [ "$ip_num" -le "$(expr ${#remote_ip[@]} -l)"]  do  read_num='1'                   ssh "$remote_user"@"${remote_ip[$ip_num]}"  df -h > /tmp/diskcheck_tmp        grep '^/dev/*'  /tmp/diskcheck_tmp | awk '{print $5}'|sed 's/\%//g'  > /tmp/diskcheck_num_tmp        while [ "$read_num" -le $(wc -l < /tmp/diskcheck_num_tmp) ]          do                size=$(sed -n "$read_num" 'p'  /tmp/diskcheck_num_tmp)                if [ "size" -gt "$FSMAX" ]                then                                               $(grep '^/dev/*'  /tmp/diskcheck_tmp |sed -n $read_num'p'  > /tmp/disk_check_mail)                        $(echo ${remote_ip[$ip_num]}) >> /tmp/disk_check_mail)                        $(mail  -s "diskcheck_alert"  admin  <  /tmp/disk_check_mail)                fi                                         read_num=$(expr  $read_num + 1)        done                       ip_num=$(expr  $ip_num + 1)done

监控主机的磁盘空间,当使用空间超过90%就通过发mail来发警告

#!/bin/bash  #monitor available disk space  #提取本服务器的IP地址信息    IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`      SPACE=` df -hP | awk '{print int($5)}'`  if [ $SPACE -ge 90 ]  then    echo "$IP 服务器 磁盘空间 使用率已经超过90%,请及时处理。"|mail -s "$IP 服务器硬盘告警"   fty89@163.com  fi

实现FTP自动上传

#! /bin/bashftp -n << END_FTP  open 192.168.1.22  user  test testing      //用户名test  密码:testing  binary  prompt  off    //关闭提示  mput   files     //上传files文件  close  bye  END_FTP

mysqlbak.sh备份数据库目录脚本

#!/bin/bashDAY=`date +%Y%m%d`SIZE=`du -sh /var/lib/mysql`echo "Date: $DAY" >> /tmp/dbinfo.txtecho "Data Size: $SIZE" >> /tmp/dbinfo.txtcd /opt/dbbak &> /dev/null || mkdir /opt/dbbaktar zcf /opt/dbbak/mysqlbak-${DAY}.tar.gz /var/lib/mysql /tmp/dbinfo.txt &> /dev/nullrm -f /tmp/dbinfo.txtcrontab-e55 23 */3 * * /opt/dbbak/dbbak.sh

打印彩虹

declare -a aryfor i in `seq 40 49`do    ary[$i]=" "    echo -en "\e[$i;5m ${ary[@]}\e[;0m"    donedeclare -a aryfor s in `seq 1 10000`do    for i in `seq 40 49`    do        ary[$i]=" "        echo -en "\e[$i;5m ${ary[@]}\e[;0m"        donedone

打印菱形

#!/bin/bashfor (( i = 1; i < 12; i++))do    if [[ $i -le 6 ]]    then        for ((j = $((12-i)); j > i; j--))        do            echo -n " "        done        for ((m = 1; m <= $((2*i-1)); m++))        do             echo -n "* "        done            echo ""#*****************************************************************************    elif [[ $i -gt 6 ]]    then        n=$((12-i))        for ((j = $((12-n)); j > n; j--))        do            echo -n " "        done        for ((m = 1; m <= $((2*n-1)); m++))        do                        echo -n "* "        done            echo ""    fidone

expect实现远程登陆自动交互

#!/usr/bin/expect -fset ipaddress [lindex $argv 0]set passwd [lindex $argv 1]set timeout 30spawn ssh-copy-id root@$ipaddressexpect {"yes/no" { send "yes\r";exp_continue }"password:" { send "$passwd\r" }}#expect "*from*"#send "mkdir -p ./tmp/testfile\r"#send "exit\r"#expect "#" #i# 命令运行完, 你要期待一个结果, 结果就是返回shell提示符了(是# 或者$)

http心跳检测

URL="http://192.168.22.191/index.html"THHP_CODE=`curl -o /dev/null -s -w "%{http_code}" "${URL}"`if [ $HTTP_CODE != 200 ]then    echo -e "apache code:"$HTTP_CODE""fi

PV过量自动实现防火墙封IP

#!/bin/bashlog=/tmp/tmp.log[ -f $log ] || touch $logfunction add_iptales(){        while read line        do                ip=`echo $line |awk '{print $2}'`                count=`echo $line |awk '{print $1}'`                        if [ $count -gt 100 ] && [ `iptables -L -n |grep "$ip" |wc -l` -lt 1 ]                                then                                        iptables -I INPUT -s $ip -j DROP                                        echo -e "$list isdropped">>/tmp/droplist.log                        fi        done<$log}function main(){        while true        do                netstat -an|grep "EST" |awk -F '[:]+' '{print $6}'|sort |uniq -c >$log                add_iptales                sleep 180        done}main

shell实现自动安装

#!/bin/bashfunction MyInstall{        if ! rpm -qa |grep -q "^$1"        then                yum install $1                if [ $? -eq 0 ]                then                        echo -e "$i install is ok\n"                else                        echo -e "$1 install no\n"                fi        else                echo -e "yi an zhuang ! \n"        fi}for ins in mysql php httpddo        MyInstall $insdone

shell实现插入排序

#!/bin/bashdeclare -a arrayfor i in `seq 1 10`do    array[$i]=$RANDOMdoneecho -e "Array_1:  ${array[@]}"for (( x=1;x<=9;x++ ))do    for(( y=1;y<=9;y++ ))    do        if [ ${array[$y]} -gt ${array[$y+1]} ]        then            temp=${array[$y]}            array[$y]=${array[$y+1]}            array[$y+1]=$temp        fi    donedoneecho -e "Array_2:  ${array[@]}"

bash实现动态进度条

#!/bin/bashi=0bar=''index=0arr=( "|" "/" "-" "\\" )while [ $i -le 100 ]do    let index=index%4    printf "[%-100s][%d%%][\e[43;46;1m%c\e[0m]\r" "$bar" "$i" "${arr[$index]}"    let i++    let index++    usleep 30000    bar+='#'    cleardoneprintf "\n"

根据文件内容创建账号

#!/bin/bashfor Uname in `cat /root/useradd.txt |gawk '{print $1}'`do                id $Uname &> /dev/null                if [ $? -eq 0 ]                then                        echo -e "这个账号已存在!"                        continue                fi        for Upasswd in `cat /root/useradd.txt |gawk '{print $2}'`        do                useradd $Uname &> /dev/null                echo "$Upasswd" |passwd --stdin $Uname &> /dev/null                if [ $? -eq 0 ]                then                        echo -e "账号创建成功!"                else                        echo -e "创建失败!"                fi        donedone

实现红色进度条

#!/bin/bashdeclare -a aryfor i in `seq 0 20`do    ary[$i]=" "    echo -en "\e[41;5m ${ary[@]}\e[;0m"    sleep 1    done

监控服务器网卡流量

#!/bin/bashwhile : ; dospeedtime='date +%m"-"%d" "%k":"%M'speedday='date +%m"-"%d'speedrx_before='ifconfig eth0|sed -n "8"p|awk '{print $2}'|cut -c7-'speedtx_before='ifconfig eth0|sed -n "8"p|awk '{print $6}'|cut -c7-'sleep 2speedrx_after='ifconfig eth0|sed -n "8"p|awk '{print $2}'|cut -c7-'speedtx_after='ifconfig eth0|sed -n "8"p|awk '{print $6}'|cut -c7-'speedrx_result=$[(speedrx_after-speedrx_before)/256]speedtx_result=$[(speedtx_after-speedtx_before)/256]echo"$speedday$speedtime Now_In_Speed: "$speedrx_result"kbps Now_OUt_Speed: "$speedtx_result"kbps"sleep 2done

检测CPU剩余百分比

#!/bin/bash#Inspect CPU#Sun Jul 31 17:25:41 CST 2016PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wl/binexport PATHTERM=linuxexport TERMCpuResult=$(top -bn 1 | grep "Cpu" | awk '{print $5}' | sed 's/\..*$//g')if [[ $CpuResult < 20 ]];then  echo "CPU WARNING : $CpuResult" > /service/script/.cpu_in.txt  top -bn 1 >> /service/script./cpu_in.txt  mail -s "Inspcet CPU" wl < /service/script/.cpu_in.txtfi

检测磁盘剩余空间

#!/bin/bash#Insepct Harddisk , If the remaining space is more than 80%, the message is sent to the wl#Tue Aug  2 09:45:56 CST 2016PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wl/binexport PATHfor RemainingSpace in $(df -h | awk '{print $5}' | grep -v 'Use' | sed -e 's/[%]//g')do  if [[ $RemainingSpace > 80 ]];then    echo -e "$RemainingSpace"    echo -e "$(df -h | grep $RemainingSpace)" > /service/script/.HarddiskWarning    mail -s "disk Warning" wl < /service/script/.HarddiskWarning  fidone

bash-实现检测apache状态并钉钉报警

#!/bin/bashfunction trans_text(){    text=$1curl 'https://oapi.dingtalk.com/robot/send?access_token=b4fcf5862088a1bc7f2bf66aea051869e62ff5879fa0e0fddb0db9b1494781c2' -H'Content-Type: application/json' -d'{    "msgtype": "text",     "text": {        "content": "'"$text"'"    }, }'}function desk_check(){        dftype=$1    shell_row=`df |wc -l`for i in `seq 2 $shell_row`do    temp=(`df -h |head -n $i |tail -n 1 |awk '{print $5 "\t" $6}'`)    disk="`echo ${temp[0]} |cut -d "%" -f 1`"    name="${temp[1]}"    hostname=`hostname`    IP=`ifconfig |grep -v "127.0.0.1" |grep "inet addr:" |sed 's/^.*inet addr://g'|sed 's/ Bcas..*$//g'`    #echo -e "$disk     $name"    Dat=`date "+%F %T"`        if [ $disk -ge $dftype ]    then        echo  "                            ======================== \n                    >磁盘分区异常< \n               主机名: $hostname \n                       IP地址: $IP \n                分区名: $name \n               使用率: $disk %\n                发生时间: $Dat \n                          ========================= \n"    fidone}function apache_check(){    url=$1URL="http://$url/"HTTP_CODE=`curl -o /dev/null -s -w "%{http_code}" "${URL}"`if [ $HTTP_CODE != 200 ]    then        echo  "                           ======================== \n                   >Apache服务异常<                           主机名: $hostname \n                                    IP地址: $IP \n                           返回代码: $HTTP_CODE \n                           发生时间: $Dat \n                          ========================= \n"                        fi}while truedo    desk_check 10    apache_check 127.0.0.1    sleep 10done

bash实现内存检测

#!/bin/bash#Inspect Memory : If the memory is less than 500 , then send mail to wlPATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wl/binexport PATHMEM=$(free -m | grep "Mem" | awk '{print $4}')if [[ MEM < 500 ]];then  echo -e "Memory Warning : Memory free $MEM" > /service/script/.MemoryWarning  mail -s "Memory Warning" wl < /service/script/.MemoryWarningfi

剩余inode检测

#!/bin/bash#Inspcet Inode : If the free INODE is less than 200, the message is sent to the wlPATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wl/binexport PATHfor FreeInode in $(df -i | grep -v "Filesystem" | awk '{print $4}')do  if [[ $FreeInode < 200 ]];then    echo -e "$(df -i | grep "$FreeInode")" > /service/script/.FreeInode    mail -s "FreeInode Warning" wl < /service/script/.FreeInode  fidone

判断哪些用户登陆了系统

#!/bin/bashdeclare -i count=0while true;do        if who |grep -q -E "^wang"        then                echo -e "用户wang 登陆了系统\n 这是第$count 次!"                break        else                let count++        fi        sleep 3done~    示例:找出UID为偶数的所有用户,显示其用户名和ID号;#!/bin/bashwhile read line; do    userid=$(echo $line | cut -d: -f3)    if [ $[$userid%2] -eq 0 ]; thenecho $line | cut -d: -f1,3    fidone < /etc/passwd

批量创建账号

#!/bin/bashsum=1while [ $sum -le 30 ]do    if [ $sum -le 9 ]    then        user="user_0$sum"    else        user="user_$sum"    fi        useradd $user        echo "123456" |passwd --stdin $user        chage -d 0 $user        let sum=sum+1done

批量扫面存活

#!/bin/bash#By:lyshark#nmap 192.168.22.0/24>ipMAC=`cat ip |awk '$1 == "MAC" && $NF == "(VMware)"{print $3}'`for i in `seq 1 20`dotemp=`echo ${MAC[@]} |awk '{print $i}'`IP=`cat /ip |grep  -B5 $temp |grep "Nmap scan"|awk '{print $5}'`    echo $IP |awk '{print $1}'done

正则匹配IP

^[0-9]{0,2}|^1[0-9]{0,2}|^2[0-5]{0,2} egrep "(^[0-9]{1,2}|^1[0-9]{0,2}|^2[0-5]{0,2})\.([0-9]{1,2}|1[0-9]{0,2}|2[0-5]{0,2})\.([0-9]{1,2}|1[0-9]{0,2}|2[0-5]{0,2})\.([0-9]{1,2}|1[0-9]{0,2}|2[0-5]{0,2})$"([0-9]{1,2}|1[0-9]{0,2}|2[0-5]{0,2})([0-9]{1,2}|1[0-9]{0,2}|2[0-5]{0,2})([0-9]{1,2}|1[0-9]{0,2}|2[0-5]{0,2})([0-9]{1,2}|1[0-9]{0,2}|2[0-5]{0,2})egrep "((25[0-5]|2[0-4][0-9]|((1[0-9]{2})|([1-9]?[0-9])))\.){3}(25[0-5]|2[0-4][0-9]|((1[0-9]{2})|([1-9]?[0-9])))"ls |egrep "((25[0-5]|2[0-4][0-9]|((1[0-9]{2})|([1-9]?[0-9])))\.){3}(25[0-5]|2[0-4][0-9]|((1[0-9]{2})|([1-9]?[0-9])$))"

正则匹配邮箱

egrep "^[0-9a-zA-Z][0-9a-zA-Z_]{1,16}[0-9a-zA-Z]\@[0-9a-zA-Z-]*([0-9a-zA-Z])?\.(com|com.cn|net|org|cn)$" ruils |egrep "^(([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])$"

实现布片效果

#!/bin/bashfunction ary_go{    $1 $2        for (( i=0;i<=$1;i++ ))    do        for (( s=0;s<=$2;s++ ))        do            if [ $[$i%2] == 0 ]            then                        if [ $[$s%2] == 0 ]                then                    echo -en "  "                else                    echo -en "\e[;44m  \e[;m"                fi            else                                                if [ $[$s%2] == 0 ]                                then                                        echo -en "\e[;42m  \e[;m"                                else                                        echo -en "  "                                fi            fi        done            echo     done}ary_go 25 50

剔除白名单以外的用户

#!/bin/bashw | awk 'NR>=3 {printf $1 "\t" $2 "\t" $3 "\n"}' > /tmp/who.txtfor i in $(awk '{printf $1}' /tmp/bai.txt)do        k=$(egrep -v "$i" /tmp/who.txt | awk '{printf $2} "\n"' | awk '{printf $2 "\n"}')        for j in $k        do                pkill -9 -t "$j"        donedone

转载于:https://www.cnblogs.com/LyShark/p/10221775.html

你可能感兴趣的文章
职场上一个人情商高的十种表现
查看>>
【底层原理】深入理解Cache (下)
查看>>
Elasticsearch安装中文分词插件IK
查看>>
进阶4:常见函数-单行函数
查看>>
简述企业信息化与企业架构关系
查看>>
npoi List 泛型导出
查看>>
流程图怎么画?分享绘制流程图简单方法
查看>>
squid的处理request和reply的流程
查看>>
硬件_陀螺仪
查看>>
SSIS的部署和配置
查看>>
计算机内存管理介绍
查看>>
POJ 2761 Feed the dogs 求区间第k大 划分树
查看>>
mysql中间件研究(Atlas,cobar,TDDL)[转载]
查看>>
ASP.NET应用程序与页面生命周期
查看>>
Linux--多网卡的7种Bond模式
查看>>
Oracle命令(一):Oracle登录命令
查看>>
业务建模 之 业务用例图
查看>>
EasyUI基础入门之Pagination(分页)
查看>>
一次PHP代码上线遇到的问题
查看>>
显示密码
查看>>