这28个值得收藏的shell脚本能让你每天摸鱼近7个小时!
文章图片
前言:
在日常工作中,但凡你要跟服务器打交道,一定离不开的神器便是shell脚本,shell脚本可以极大的提高工程师的工作效率,避免一些认为因素导致的手误。那么今天圈圈就给大家分享28个shell脚本,希望对大家有帮助,脚本比较多比较长,一时间记不住可以先收藏,用到的时候及时拿出来比对一下即可!
1. 轮询检测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 true
doshell_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
donesleep 10
done
2. 一台监控主机,一台被监控主机。被监控主机分区使用率大于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_tmpwhile [ "$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
3.监控主机的磁盘空间,当使用空间超过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 服务器硬盘告警,
公众号:Geek安全"fty89@163.com
fi
4. 自动ftp上传
#! /bin/bashftp -n << END_FTP
open 192.168.1.22
usertest testing//用户名test密码:testing
binary
promptoff//关闭提示
mputfiles//上传files文件
close
bye
END_FTP
5.mysqlbak.sh备份数据库目录脚本
#!/bin/bashDAY=`date +%Y%m%d`
SIZE=`du -sh /var/lib/mysql`
echo "Date: $DAY" >> /tmp/dbinfo.txt
echo "Data Size: $SIZE" >> /tmp/dbinfo.txt
cd /opt/dbbak &> /dev/null || mkdir /opt/dbbak
tar zcf /opt/dbbak/mysqlbak-${DAY}.tar.gz /var/lib/mysql /tmp/dbinfo.txt &> /dev/null
rm -f /tmp/dbinfo.txtcrontab-e
55 23 */3 * * /opt/dbbak/dbbak.sh
文章图片
6.打印彩虹
declare -a aryfor i in `seq 40 49`
doary[$i]=" "
echo -en "\e[$i;
5m ${ary[@]}\e[;
0m"donedeclare -a ary
for s in `seq 1 10000`
do
for i in `seq 40 49`
do
ary[$i]=" "
echo -en "\e[$i;
5m ${ary[@]}\e[;
0m"
done
done
7.打印菱形
#!/bin/bashfor (( i = 1;
i < 12;
i++))
do
if [[ $i -le 6 ]]
then
for ((j = $((12-i));
j > i;
j--))
do
echo -n " "
donefor ((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 " "
donefor ((m = 1;
m <= $((2*n-1));
m++))
do
echo -n "* "
done
echo ""
fidone
8.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提示符了(是# 或者$)
9.http心跳检测
#!/bin/bashfunction MyInstall
{
if ! rpm -qa |grep -q "^$1"
thenyum 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 httpd
do
MyInstall $ins
done
12.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
fidonedoneecho -e "Array_2:${array[@]}"
13.bash实现动态进度条
#!/bin/bash
i=0
bar=''
index=0
arr=( "|" "/" "-" "\\" )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+='#'
clear
doneprintf "\n"
14. 根据文件内容创建账号
#!/bin/bashfor Uname in `cat /root/useradd.txt |gawk '{print $1}'`
doid $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 "创建失败!"
fidonedone
15. 红色进度条
#!/bin/bashdeclare -a aryfor i in `seq 0 20`
doary[$i]=" "
echo -en "\e[41;
5m ${ary[@]}\e[;
0m"
sleep 1done
16.监控服务器网卡流量
#!/bin/bash
#network
#Mike.Xu
while : ;
do
speedtime='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 2
speedrx_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 2
done
17. 检测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/bin
export PATHTERM=linux
export 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.txt
fi
18.检测磁盘剩余空间
#!/bin/bash#Insepct Harddisk , If the remaining space is more than 80%, the message is sent to the wl#Tue Aug2 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
fi
done
19. bash-实现检测apache状态并钉钉报警
#!/bin/bashfunction trans_text(){
text=$1
curl '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`
dotemp=(`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"
fi
done
}function apache_check(){
url=$1
URL="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 true
do
desk_check 10
apache_check 127.0.0.1sleep 10
done
20.内存检测
#!/bin/bash#Inspect Memory : If the memory is less than 500 , then send mail to wl#Tue Aug2 09:13:43 CST 2016PATH=/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/.MemoryWarning
fi
21.剩余inode检测
#!/bin/bash#Inspcet Inode : If the free INODE is less than 200, the message is sent to the wl#Tue Aug2 10:21:29 CST 2016PATH=/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
fi
done
22.判断哪些用户登陆了系统
#!/bin/bashdeclare -i count=0while true;
doif who |grep -q -E "^wang"
then
echo -e "用户wang 登陆了系统\n 这是第$count 次!威信公众浩:wljsghq"
break
else
let count++
fisleep 3
done
~示例:找出UID为偶数的所有用户,显示其用户名和ID号;#!/bin/bash
while read line;
do
userid=$(echo $line | cut -d: -f3)
if [ $[$userid%2] -eq 0 ];
then
echo $line | cut -d: -f1,3
fi
done < /etc/passwd
23.批量创建账号
#!/bin/bashsum=1while [ $sum -le 30 ]
do
if [ $sum -le 9 ]
then
user="user_0$sum"
else
user="user_$sum"
fiuseradd $user
echo "123456" |passwd --stdin $user
chage -d 0 $user
let sum=sum+1done
24.批量扫面存活
#!/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
25.正则匹配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])$))"
26.正则匹配邮箱
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])$"
27.实现布片效果
#!/bin/bashfunction ary_go
{
$1 $2for (( i=0;
i<=$1;
i++ ))
do
for (( s=0;
s<=$2;
s++ ))
do
if [ $[$i%2] == 0 ]
thenif [ $[$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 ""
fifidone
echo done}ary_go 25 50
28.剔除白名单以外的用户
#!/bin/bash
w | awk 'NR>=3 {printf $1 "\t" $2 "\t" $3 "\n"}' > /tmp/who.txt
for 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"
done
done
福利分享 1.GitHub上星标100k+面试攻略
2.网络安全所有方向的学习路线
3.60多个视频教程
4.100多个小项目
5.300多本电子书
6.渗透测试知识点汇总
7.CTF资料库
【资料领取】
【这28个值得收藏的shell脚本能让你每天摸鱼近7个小时!】
文章图片
推荐阅读
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个小故事,我的思考。
- 9班|9班 刘志雪
- 这辈子我们都不要再联系了
- 猎杀IP
- 闲杂“细雨”
- 眼观耳听美食的日子
- 开花店的前景怎么样()
- 我眼中的佛系经纪人
- 拍照一年啦,如果你想了解我,那就请先看看这篇文章