Preface:

In daily work, every time you have to deal with the server, the magic tool is shell script. Shell script can greatly improve the working efficiency of engineers and avoid mistakes caused by some factors. So today, I will share 28 shell scripts with you. I hope they will be helpful to you. The scripts are more and longer.

1. Poll to check the status of Apache and enable the pinning alarm

#! /bin/bash shell_user="root" shell_domain="apache" shell_list="/root/ip_list" shell_row=`cat $shell_list |wc -l` function  trans_text(){ text=$1 curl 'https://oapi.dingtalk.com/robot/send?access_token=b4fcf5862088a1bc7f2bf66a' -h 'content-type: application/json' -d'{# address "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 server status is abnormal, page return code: "$HTTP_CODE" "Please handle in time! \n ================================================================= \n" fi } while true do shell_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 10 done

2. One monitoring host and one monitored host. An alert email will be sent if the partition utilization rate of the monitored host is greater than 80%. Put it in a crontab and do it every 10 minutes

#! /bin/bash FSMAX="80" remote_user='root' remote_ip=(IP address list) 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

3. Monitor the disk space of the host and send an E-mail warning when the disk space exceeds 90%

#! # # / bin/bash monitor the available disk space to extract the server's IP address information IP = ` ifconfig eth0 | grep "inet addr" | the cut - 2 - d ":" f | the cut - 1 f - "" ` d SPACE = ` df - hP | awk '{print int ($5)}' ` if [90] $SPACE - ge then echo" $IP server disk SPACE utilization rate has exceeded 90%, please handle in time." | mail - s "$IP server hard disk alarm, public number: Geek security" [email protected] fi

4. Automatic FTP uploading

#! /bin/bash ftp-n << END_FTP open 192.168.1.22 user test testing // MPUT files // Upload files close bye END_FTP

5. MySQLBAK.sh backup database directory script

#! /bin/bash DAY=`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.txt crontab-e 55 23 */3 * * /opt/dbbak/dbbak.sh

6. Print rainbows

declare -a ary for i in `seq 40 49` do ary[$i]=" " echo -en "\e[$i;5m ${ary[@]}\e[;0m" done declare -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. Print diamond shapes

#! /bin/bash for (( 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 "" fi done

8. Expect implements remote login automatic interaction

#! /usr/bin/expect -f set ipaddress [lindex $argv 0] set passwd [lindex $argv 1] set timeout 30 spawn ssh-copy-id root@$ipaddress expect { "yes/no" { send "yes\r"; exp_continue } "password:" { send "$passwd\r" } } #expect "*from*" #send "mkdir -p ./tmp/testfile\r" #send "exit\r" When the #expect "#" #i# command is finished, you should expect the shell prompt to return (either # or $).

9. HTTP heartbeat detection

#! /bin/bash function 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 httpd do MyInstall $ins done

12. The shell implements insert sort

#! /bin/bash declare -a array for i in `seq 1 10` do array[$i]=$RANDOM done echo -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 done done echo -e "Array_2: ${array[@]}"

13. Bash implements dynamic progress bars

#! /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 done  printf "\n"

14. Create an account based on the contents of the file

#! /bin/bash for Uname in `cat /root/useradd.txt |gawk '{print $1}'` do id $Uname &> /dev/null if [ $? -eq 0 ] then echo -e "This account already exists! Source: WeChat number public network technology dry coil 】 【 "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 "account creation success!" Else echo -e "Create failed!" fi done done

15. Red progress bar

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

16. Monitor server network card traffic

#! /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. Detect the CPU remaining percentage

#! /bin/bash #Inspect CPU #Sun Jul 31 17:25:41 CST 2016 PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wl/bin export PATH TERM=linux export TERM CpuResult=$(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. Detect disk free space

#! /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 2016 PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wl/bin export PATH for 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 – implements the detection of Apache status and pin alarm

#! /bin/bash function 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` 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: $hostname \n IP address: $IP \n partition name: $name \n usage: $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 service exceptions < Host name: $hostname \n IP address: $IP \n Return code: $HTTP_CODE \n Occurrence: $Dat \ n = = = = = = = = = = = = = = = = = = = = = = = = = \ n "fi} while true do desk_check 10 apache_check 127.0.0.1 sleep 10 done

20. Memory detection

#! /bin/bash #Inspect Memory : If the memory is less than 500 , then send mail to wl #Tue Aug 2 09:13:43 CST 2016 PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wl/bin export PATH MEM=$(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. Remaining inode detection

#! /bin/bash #Inspcet Inode : If the free INODE is less than 200, the message is sent to the wl #Tue Aug 2 10:21:29 CST 2016 PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wl/bin export PATH for 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

Determine which users are logged in to the system

#! /bin/bash declare -i count=0 while true; Do if the who | grep - q - E ^ "wang," then the echo - E "user wang landed system \ n $count this is the first time! WLJSGHQ "break else let count++ fi sleep 3 done ~ Example: find all users whose UID is even, display their username and ID number; #! /bin/bash while read line; do userid=$(echo $line | cut -d: -f3) if [ $[$userid%2] -eq 0 ]; Then the echo $line | the cut - d: - f1, 3 fi done < / etc/passwd

23. Batch create accounts

#! /bin/bash sum=1 while [ $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+1 done

24. Batch scanning survival

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

25. Regular matching IP

^ [0-9] {0, 2} | ^ 1 [0-9] {0, 2} | ^ 2 [0 to 5] {0, 2} egrep "(^ [0-9] {1, 2} | ^ 1 [0-9] {0, 2} | ^ 2 [0 to 5]} {0, 2) \. ([0-9] {1, 2} | 1 [0-9] {0, 2} | 2 [0 to 5]} {0, 2) \. ([0-9] {1, 2} | 1 [0-9] {0, 2} | 2 [0 to 5]} {0, 2). \ [ 0-9] {1, 2} | 1 [0-9] {0, 2} | 2 [0 to 5]} {0, 2) $" ([0-9] {1, 2} | 1 [0-9] {0, 2} | 2 [0 to 5]} {0, 2) ([0-9] {1, 2} | 1 [0-9] {0, 2} | 2 [0 to 5]} {0, 2) ([0-9] {1, 2} | 1 [0-9] {0, 2} | 2 [0 to 5]} {0, 2) ([0-9] {1, 2} | 1 [0-9] {0, 2} | 2 [0 to 5]} {0, 2) egrep "((25 [0 to 5] | 2 [0 to 4] [0-9] | ([0-9] {2} (1) | ([1-9]? [0-9]))) \.) {3} (25 [0 to 5] | 2 [0 to 4] [0-9] | ([0-9] {2} (1) | ([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 to 5] | 2 [0 to 4] [0-9] | ([0-9] {2} (1) | ([1-9]? [0-9]) $)"

26. Regularly match mailboxes

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

27. Achieve a cloth effect

#! /bin/bash function 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

Eliminate users who are not on the whitelist

#! /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

Benefits to share

1.GitHub Star 100K + Interview Guide 2. Network security learning routes in all directions 3.60 video tutorials 4.100 small projects 5.300 e-books 6. 7.CTF database

[Data Collection]