shell编程1000实列

1,keepalive剔除后端服务

#!/bin/bash
#行数请自定义,默认8行
if [ X$2 == X ];then
echo "error: IP null"
read
exit
fi
case $1 in
del)
sed -i '/real_server.*'$2'.*8888/,+8 s/^/#/' /etc/keepalived/keepalived.conf
/etc/init.d/keepalived reload
;;
add)
sed -i '/real_server.*'$2'.*8888/,+8 s/^#//' /etc/keepalived/keepalived.conf
/etc/init.d/keepalived reload
;;
*)
echo "Parameter error"
;;
esac

2,ssh批量执行命令

#版本1
#!/bin/bash
while read line
do
Ip=`echo $line|awk '{print $1}'`
Passwd=`echo $line|awk '{print $2}'`
ssh -n localhost "cat -"
sshpass -p "$Passwd" ssh -n -t -o StrictHostKeyChecking=no root@$Ip "id"
done<iplist.txt

#版本2
#!/bin/bash
Iplist=`awk '{print $1}' iplist.txt`
for Ip in $Iplist
do
Passwd=`awk '/'$Ip'/{print $2}' iplist.txt`
sshpass -p "$Passwd" ssh -n -t -o StrictHostKeyChecking=no root@$Ip "id"
done

3,两日期间隔天数

D1=`date -d '20070409' +"%s"`
D2=`date -d '20070304 ' +"%s"`
D3=$(($D1 - $D2))
echo $(($D3/60/60/24))

4,远程打包

ssh -n $ip 'find '$path' /data /opt -type f -name "*.sh" -or -name "*.py" -or -name "*.pl" |xargs tar zcvpf /tmp/data_backup.tar.gz'

5,判断日期是否合法

#!/bin/sh
while read a
do
if echo $a | grep -q "-" && date -d $a +%Y%m%d > /dev/null 2>&1
then
if echo $a | grep -e '^[0-9]\{4\}-[01][0-9]-[0-3][0-9]$'
then
break
else
echo "您输入的日期不合法,请从新输入!"
fi
else
echo "您输入的日期不合法,请从新输入!"
fi
done
echo "日期为$a"

6,简单防ddos简本

#!/bin/bash
#netstat -an|grep :80|awk '{ print $5 }'|sort|awk -F: '{print $1}'|uniq -c|awk '$1 > 40'|awk '$2 != ""'>>/usr/local/src/black.txt

/bin/netstat -an|grep :443|awk '{ print $5 }'|sort|awk -F: '{print $1}'|uniq -c|awk ' $1 >150 '|awk '$2 != "0.0.0.0"'|awk '$2 != ""'>>/usr/local/src/black.txt
cnt=0
for i in `awk '{print $2}' /usr/local/src/black.txt`
do
if [ ! -z "$i" ];
then
COUNT=`grep $i /usr/local/src/black.txt | awk '{print $1}'`
DEFINE="150"
ZERO="0"
if [ $COUNT -gt $DEFINE ];
then
grep $i /usr/local/src/white.txt > /dev/null
if [ $? -gt $ZERO ];
then
IPEX=`iptables -nL | grep "$i"`
if [ -z "$IPEX" ];
then
echo "$COUNT $i"
iptables -I INPUT -s $i -j DROP
echo -e "[`date "+%Y-%m-%d %T"`] IP: $i\tCOUNT: $COUNT" >> /usr/local/src/banned.log
fi
fi
fi
((cnt=cnt+1))
fi
done
echo "[`date "+%Y-%m-%d %T"`] Script runned, found $cnt." >> /usr/local/src/run.log

7,shell 与运算

#!/bin/bash

a=24
b=47

if [ "$a" -eq 24 ] && [ "$b" -eq 47 ]
then
echo "Test #1 succeeds."
else
echo "Test #1 fails."
fi

8,文件夹复制

#!/bin/bash
E_NOARGS=65

if [ -z "$1" ] # Exit if no argument given.
then
echo "Usage: `basename $0` directory-to-copy-to"
exit $E_NOARGS
fi

ls . | xargs -i -t cp ./{} $1

9,算1+到1000

#!/bin/bash

i=0
n=1                                                  
while  [ $n -lt 1001 ]; do                                 
i=$(( $i + $n ))                                        
n=$(( $n + 1 ))
done
echo  $i
2,最简单的方法
seq -s + 1 1000|bc
10,mysql备份脚本'
#!/bin/bash
nowdate=`date +%Y%m%d`

olddate=`date -d -7day +%Y%m%d`
mysqldump=/data/mysql/bin/mysqldump
user=xxx
pass=xxxxxxx
pwd=/data/mysqlbackup
$mysqldump -u$user -p$pass database>$pwd/database$nowdate.sql
cd $pwd
rm databae$olddate.sql -rf

11,nginx分割日志

#!/bin/bash
LOG_PATH=/user/nginx/logs/
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
PID=/user/nginx/nginx.pid
#分割日志
mv ${LOG_PATH}xxxx-access.log ${LOG_PATH}xxxx-access-${YESTERDAY}.log
#向Nginx主进程发送USR1信号,重新打开日志文件
kill -USR1 `cat ${PID}`

更多教程

 

转载于:https://www.cnblogs.com/hu1313/p/10064118.html

Shell脚本高级编程教程,希望对你有所帮助。 Example 10-23. Using continue N in an actual task: 1 # Albert Reiner gives an example of how to use "continue N": 2 # --------------------------------------------------------- 3 4 # Suppose I have a large number of jobs that need to be run, with 5 #+ any data that is to be treated in files of a given name pattern in a 6 #+ directory. There are several machines that access this directory, and 7 #+ I want to distribute the work over these different boxen. Then I 8 #+ usually nohup something like the following on every box: 9 10 while true 11 do 12 for n in .iso.* 13 do 14 [ "$n" = ".iso.opts" ] && continue 15 beta=${n#.iso.} 16 [ -r .Iso.$beta ] && continue 17 [ -r .lock.$beta ] && sleep 10 && continue 18 lockfile -r0 .lock.$beta || continue 19 echo -n "$beta: " `date` 20 run-isotherm $beta 21 date 22 ls -alF .Iso.$beta 23 [ -r .Iso.$beta ] && rm -f .lock.$beta 24 continue 2 25 done 26 break 27 done 28 29 # The details, in particular the sleep N, are particular to my 30 #+ application, but the general pattern is: 31 32 while true 33 do 34 for job in {pattern} 35 do 36 {job already done or running} && continue 37 {mark job as running, do job, mark job as done} 38 continue 2 39 done 40 break # Or something like `sleep 600' to avoid termination. 41 done 42 43 # This way the script will stop only when there are no more jobs to do 44 #+ (including jobs that were added during runtime). Through the use 45 #+ of appropriate lockfiles it can be run on several machines 46 #+ concurrently without duplication of calculations [which run a couple 47 #+ of hours in my case, so I really want to avoid this]. Also, as search 48 #+ always starts again from the beginning, one can encode priorities in 49 #+ the file names. Of course, one could also do this without `continue 2', 50 #+ but then one would have to actually check whether or not some job 51 #+ was done (so that we should immediately look for the next job) or not 52 #+ (in which case we terminate or sleep for a long time before checking 53 #+ for a new job).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值