非常实用的 Shell 脚本

检测两台服务器指定目录下的文件一致性

#!/bin/bash<br>#####################################<br>#&#x68C0;&#x6D4B;&#x4E24;&#x53F0;&#x670D;&#x52A1;&#x5668;&#x6307;&#x5B9A;&#x76EE;&#x5F55;&#x4E0B;&#x7684;&#x6587;&#x4EF6;&#x4E00;&#x81F4;&#x6027;<br>#####################################<br>#&#x901A;&#x8FC7;&#x5BF9;&#x6BD4;&#x4E24;&#x53F0;&#x670D;&#x52A1;&#x5668;&#x4E0A;&#x6587;&#x4EF6;&#x7684;md5&#x503C;&#xFF0C;&#x8FBE;&#x5230;&#x68C0;&#x6D4B;&#x4E00;&#x81F4;&#x6027;&#x7684;&#x76EE;&#x7684;<br>dir=/data/web<br>b_ip=192.168.88.10<br>#&#x5C06;&#x6307;&#x5B9A;&#x76EE;&#x5F55;&#x4E0B;&#x7684;&#x6587;&#x4EF6;&#x5168;&#x90E8;&#x904D;&#x5386;&#x51FA;&#x6765;&#x5E76;&#x4F5C;&#x4E3A;md5sum&#x547D;&#x4EE4;&#x7684;&#x53C2;&#x6570;&#xFF0C;&#x8FDB;&#x800C;&#x5F97;&#x5230;&#x6240;&#x6709;&#x6587;&#x4EF6;&#x7684;md5&#x503C;&#xFF0C;&#x5E76;&#x5199;&#x5165;&#x5230;&#x6307;&#x5B9A;&#x6587;&#x4EF6;&#x4E2D;<br>find&#xA0;$dir&#xA0;-type&#xA0;f|xargs&#xA0;md5sum&#xA0;>&#xA0;/tmp/md5_a.txt<br>ssh&#xA0;$b_ip&#xA0;"find&#xA0;$dir&#xA0;-type&#xA0;f|xargs&#xA0;md5sum&#xA0;>&#xA0;/tmp/md5_b.txt"<br>scp&#xA0;$b_ip:/tmp/md5_b.txt&#xA0;/tmp<br>#&#x5C06;&#x6587;&#x4EF6;&#x540D;&#x4F5C;&#x4E3A;&#x904D;&#x5386;&#x5BF9;&#x8C61;&#x8FDB;&#x884C;&#x4E00;&#x4E00;&#x6BD4;&#x5BF9;<br>for&#xA0;f&#xA0;in&#xA0;awk '{print 2} /tmp/md5_a.txt'<br>do<br>#&#x4EE5;a&#x673A;&#x5668;&#x4E3A;&#x6807;&#x51C6;&#xFF0C;&#x5F53;b&#x673A;&#x5668;&#x4E0D;&#x5B58;&#x5728;&#x904D;&#x5386;&#x5BF9;&#x8C61;&#x4E2D;&#x7684;&#x6587;&#x4EF6;&#x65F6;&#x76F4;&#x63A5;&#x8F93;&#x51FA;&#x4E0D;&#x5B58;&#x5728;&#x7684;&#x7ED3;&#x679C;<br>if&#xA0;grep&#xA0;-qw&#xA0;"$f"&#xA0;/tmp/md5_b.txt<br>then<br>md5_a=grep -w "$f" /tmp/md5_a.txt|awk '{print 1}'<br>md5_b=grep -w "$f" /tmp/md5_b.txt|awk '{print 1}'<br>#&#x5F53;&#x6587;&#x4EF6;&#x5B58;&#x5728;&#x65F6;&#xFF0C;&#x5982;&#x679C;md5&#x503C;&#x4E0D;&#x4E00;&#x81F4;&#x5219;&#x8F93;&#x51FA;&#x6587;&#x4EF6;&#x6539;&#x53D8;&#x7684;&#x7ED3;&#x679C;<br>if&#xA0;[&#xA0;$md5_a&#xA0;!=&#xA0;$md5_b&#xA0;]<br>then<br>echo&#xA0;"$f&#xA0;changed."<br>fi<br>else<br>echo&#xA0;"$f&#xA0;deleted."<br>fi<br>done

定时清空文件内容,定时记录文件大小

#!/bin/bash<br>################################################################<br>#&#x6BCF;&#x5C0F;&#x65F6;&#x6267;&#x884C;&#x4E00;&#x6B21;&#x811A;&#x672C;&#xFF08;&#x4EFB;&#x52A1;&#x8BA1;&#x5212;&#xFF09;&#xFF0C;&#x5F53;&#x65F6;&#x95F4;&#x4E3A;0&#x70B9;&#x6216;12&#x70B9;&#x65F6;&#xFF0C;&#x5C06;&#x76EE;&#x6807;&#x76EE;&#x5F55;&#x4E0B;&#x7684;&#x6240;&#x6709;&#x6587;&#x4EF6;&#x5185;<br>#&#x5BB9;&#x6E05;&#x7A7A;&#xFF0C;&#x4F46;&#x4E0D;&#x5220;&#x9664;&#x6587;&#x4EF6;&#xFF0C;&#x5176;&#x4ED6;&#x65F6;&#x95F4;&#x5219;&#x53EA;&#x7EDF;&#x8BA1;&#x5404;&#x4E2A;&#x6587;&#x4EF6;&#x7684;&#x5927;&#x5C0F;&#xFF0C;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#x4E00;&#x884C;&#xFF0C;&#x8F93;&#x51FA;&#x5230;&#x4EE5;&#x65F6;#&#x95F4;&#x548C;&#x65E5;&#x671F;&#x547D;&#x540D;&#x7684;&#x6587;&#x4EF6;&#x4E2D;&#xFF0C;&#x9700;&#x8981;&#x8003;&#x8651;&#x76EE;&#x6807;&#x76EE;&#x5F55;&#x4E0B;&#x4E8C;&#x7EA7;&#x3001;&#x4E09;&#x7EA7;&#x7B49;&#x5B50;&#x76EE;&#x5F55;&#x7684;&#x6587;&#x4EF6;<br>################################################################<br>logfile=/tmp/date +%H-%F.log<br>n=date +%H<br>if&#xA0;[&#xA0;$n&#xA0;-eq&#xA0;00&#xA0;]&#xA0;||&#xA0;[&#xA0;$n&#xA0;-eq&#xA0;12&#xA0;]<br>then<br>#&#x901A;&#x8FC7;for&#x5FAA;&#x73AF;&#xFF0C;&#x4EE5;find&#x547D;&#x4EE4;&#x4F5C;&#x4E3A;&#x904D;&#x5386;&#x6761;&#x4EF6;&#xFF0C;&#x5C06;&#x76EE;&#x6807;&#x76EE;&#x5F55;&#x4E0B;&#x7684;&#x6240;&#x6709;&#x6587;&#x4EF6;&#x8FDB;&#x884C;&#x904D;&#x5386;&#x5E76;&#x505A;&#x76F8;&#x5E94;&#x64CD;&#x4F5C;<br>for&#xA0;i&#xA0;in&#xA0;find /data/log/ -type f<br>do<br>true&#xA0;>&#xA0;$i<br>done<br>else<br>for&#xA0;i&#xA0;in&#xA0;find /data/log/ -type f<br>do<br>du&#xA0;-sh&#xA0;$i&#xA0;>>&#xA0;$logfile<br>done<br>fi

检测网卡流量,并按规定格式记录在日志中

#!/bin/bash<br>#######################################################<br>#&#x68C0;&#x6D4B;&#x7F51;&#x5361;&#x6D41;&#x91CF;&#xFF0C;&#x5E76;&#x6309;&#x89C4;&#x5B9A;&#x683C;&#x5F0F;&#x8BB0;&#x5F55;&#x5728;&#x65E5;&#x5FD7;&#x4E2D;<br>#&#x89C4;&#x5B9A;&#x4E00;&#x5206;&#x949F;&#x8BB0;&#x5F55;&#x4E00;&#x6B21;<br>#&#x65E5;&#x5FD7;&#x683C;&#x5F0F;&#x5982;&#x4E0B;&#x6240;&#x793A;:<br>#2019-08-12&#xA0;20:40<br>#ens33&#xA0;input:&#xA0;1234bps<br>#ens33&#xA0;output:&#xA0;1235bps<br>######################################################3<br>while&#xA0;:<br>do<br>#&#x8BBE;&#x7F6E;&#x8BED;&#x8A00;&#x4E3A;&#x82F1;&#x6587;&#xFF0C;&#x4FDD;&#x969C;&#x8F93;&#x51FA;&#x7ED3;&#x679C;&#x662F;&#x82F1;&#x6587;&#xFF0C;&#x5426;&#x5219;&#x4F1A;&#x51FA;&#x73B0;bug<br>LANG=en<br>logfile=/tmp/date +%d.log<br>#&#x5C06;&#x4E0B;&#x9762;&#x6267;&#x884C;&#x7684;&#x547D;&#x4EE4;&#x7ED3;&#x679C;&#x8F93;&#x51FA;&#x91CD;&#x5B9A;&#x5411;&#x5230;logfile&#x65E5;&#x5FD7;&#x4E2D;<br>exec&#xA0;>>&#xA0;$logfile<br>date&#xA0;+"%F&#xA0;%H:%M"<br>#sar&#x547D;&#x4EE4;&#x7EDF;&#x8BA1;&#x7684;&#x6D41;&#x91CF;&#x5355;&#x4F4D;&#x4E3A;kb/s&#xFF0C;&#x65E5;&#x5FD7;&#x683C;&#x5F0F;&#x4E3A;bps&#xFF0C;&#x56E0;&#x6B64;&#x8981;*1000*8<br>sar&#xA0;-n&#xA0;DEV&#xA0;1&#xA0;59|grep&#xA0;Average|grep&#xA0;ens33|awk&#xA0;'{print&#xA0;$2,"\t","input:","\t",$5*1000*8,"bps","\n",$2,"\t","output:","\t",$6*1000*8,"bps"}'<br>echo&#xA0;"####################"<br>#&#x56E0;&#x4E3A;&#x6267;&#x884C;sar&#x547D;&#x4EE4;&#x9700;&#x8981;59&#x79D2;&#xFF0C;&#x56E0;&#x6B64;&#x4E0D;&#x9700;&#x8981;sleep<br>done

计算文档每行出现的数字个数,并计算整个文档的数字总数

#!/bin/bash<br>#########################################################<br>#&#x8BA1;&#x7B97;&#x6587;&#x6863;&#x6BCF;&#x884C;&#x51FA;&#x73B0;&#x7684;&#x6570;&#x5B57;&#x4E2A;&#x6570;&#xFF0C;&#x5E76;&#x8BA1;&#x7B97;&#x6574;&#x4E2A;&#x6587;&#x6863;&#x7684;&#x6570;&#x5B57;&#x603B;&#x6570;<br>########################################################<br>#&#x4F7F;&#x7528;awk&#x53EA;&#x8F93;&#x51FA;&#x6587;&#x6863;&#x884C;&#x6570;&#xFF08;&#x622A;&#x53D6;&#x7B2C;&#x4E00;&#x6BB5;&#xFF09;<br>n=wc -l a.txt|awk '{print $1}'<br>sum=0<br>#&#x6587;&#x6863;&#x4E2D;&#x6BCF;&#x4E00;&#x884C;&#x53EF;&#x80FD;&#x5B58;&#x5728;&#x7A7A;&#x683C;&#xFF0C;&#x56E0;&#x6B64;&#x4E0D;&#x80FD;&#x76F4;&#x63A5;&#x7528;&#x6587;&#x6863;&#x5185;&#x5BB9;&#x8FDB;&#x884C;&#x904D;&#x5386;<br>for&#xA0;i&#xA0;in&#xA0;seq 1 $n<br>do<br>#&#x8F93;&#x51FA;&#x7684;&#x884C;&#x7528;&#x53D8;&#x91CF;&#x8868;&#x793A;&#x65F6;&#xFF0C;&#x9700;&#x8981;&#x7528;&#x53CC;&#x5F15;&#x53F7;<br>line=sed -n "$i"p a.txt<br>#wc&#xA0;-L&#x9009;&#x9879;&#xFF0C;&#x7EDF;&#x8BA1;&#x6700;&#x957F;&#x884C;&#x7684;&#x957F;&#x5EA6;<br>n_n=echo $line|sed s'/[^0-9]//'g|wc -L<br>echo&#xA0;$n_n<br>sum=$[$sum+$n_n]<br>done<br>echo&#xA0;"sum:$sum"

杀死所有脚本

#!/bin/bash<br>################################################################<br>#&#x6709;&#x4E00;&#x4E9B;&#x811A;&#x672C;&#x52A0;&#x5165;&#x5230;&#x4E86;cron&#x4E4B;&#x4E2D;&#xFF0C;&#x5B58;&#x5728;&#x811A;&#x672C;&#x5C1A;&#x672A;&#x8FD0;&#x884C;&#x5B8C;&#x6BD5;&#x53C8;&#x6709;&#x65B0;&#x4EFB;&#x52A1;&#x9700;&#x8981;&#x6267;&#x884C;&#x7684;&#x60C5;&#x51B5;&#xFF0C;<br>#&#x5BFC;&#x81F4;&#x7CFB;&#x7EDF;&#x8D1F;&#x8F7D;&#x5347;&#x9AD8;&#xFF0C;&#x56E0;&#x6B64;&#x53EF;&#x901A;&#x8FC7;&#x7F16;&#x5199;&#x811A;&#x672C;&#xFF0C;&#x7B5B;&#x9009;&#x51FA;&#x5F71;&#x54CD;&#x8D1F;&#x8F7D;&#x7684;&#x8FDB;&#x7A0B;&#x4E00;&#x6B21;&#x6027;&#x5168;&#x90E8;&#x6740;&#x6B7B;&#x3002;<br>################################################################<br>ps&#xA0;aux|grep&#xA0;&#x6307;&#x5B9A;&#x8FDB;&#x7A0B;&#x540D;|grep&#xA0;-v&#xA0;grep|awk&#xA0;'{print&#xA0;$2}'|xargs&#xA0;kill&#xA0;-9

从FTP服务器下载文件

#!/bin/bash<br>if&#xA0;[&#xA0;$#&#xA0;-ne&#xA0;1&#xA0;];&#xA0;then<br>&#xA0;&#xA0;&#xA0;&#xA0;echo&#xA0;"Usage:&#xA0;$0&#xA0;filename"<br>fi<br>dir=$(dirname&#xA0;$1)<br>file=$(basename&#xA0;$1)<br>ftp&#xA0;-n&#xA0;-v&#xA0;<< eof   # -n 自动登录<br>open&#xA0;192.168.1.10&#xA0;&#xA0;#&#xA0;ftp&#x670D;&#x52A1;&#x5668;<br>user&#xA0;admin&#xA0;password<br>binary&#xA0;&#xA0;&#xA0;#&#xA0;&#x8BBE;&#x7F6E;ftp&#x4F20;&#x8F93;&#x6A21;&#x5F0F;&#x4E3A;&#x4E8C;&#x8FDB;&#x5236;&#xFF0C;&#x907F;&#x514D;MD5&#x503C;&#x4E0D;&#x540C;&#x6216;.tar.gz&#x538B;&#x7F29;&#x5305;&#x683C;&#x5F0F;&#x9519;&#x8BEF;<br>cd&#xA0;$dir<br>get&#xA0;"$file"<br>EOF<br></ eof   # -n 自动登录

连续输入5个100以内的数字,统计和、最小和最大

#!/bin/bash<br>COUNT=1<br>SUM=0<br>MIN=0<br>MAX=100<br>while&#xA0;[&#xA0;$COUNT&#xA0;-le&#xA0;5&#xA0;];&#xA0;do<br>&#xA0;&#xA0;&#xA0;&#xA0;read&#xA0;-p&#xA0;"&#x8BF7;&#x8F93;&#x5165;1-10&#x4E2A;&#x6574;&#x6570;&#xFF1A;"&#xA0;INT<br>&#xA0;&#xA0;&#xA0;&#xA0;if&#xA0;[[&#xA0;!&#xA0;$INT&#xA0;=~&#xA0;^[0-9]+$&#xA0;]];&#xA0;then<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;echo&#xA0;"&#x8F93;&#x5165;&#x5FC5;&#x987B;&#x662F;&#x6574;&#x6570;&#xFF01;"<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;exit&#xA0;1<br>&#xA0;&#xA0;&#xA0;&#xA0;elif&#xA0;[[&#xA0;$INT&#xA0;-gt&#xA0;100&#xA0;]];&#xA0;then<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;echo&#xA0;"&#x8F93;&#x5165;&#x5FC5;&#x987B;&#x662F;100&#x4EE5;&#x5185;&#xFF01;"<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;exit&#xA0;1<br>&#xA0;&#xA0;&#xA0;&#xA0;fi<br>&#xA0;&#xA0;&#xA0;&#xA0;SUM=$(($SUM+$INT))<br>&#xA0;&#xA0;&#xA0;&#xA0;[&#xA0;$MIN&#xA0;-lt&#xA0;$INT&#xA0;]&#xA0;&&&#xA0;MIN=$INT<br>&#xA0;&#xA0;&#xA0;&#xA0;[&#xA0;$MAX&#xA0;-gt&#xA0;$INT&#xA0;]&#xA0;&&&#xA0;MAX=$INT<br>&#xA0;&#xA0;&#xA0;&#xA0;let&#xA0;COUNT++<br>done<br>echo&#xA0;"SUM:&#xA0;$SUM"<br>echo&#xA0;"MIN:&#xA0;$MIN"<br>echo&#xA0;"MAX:&#xA0;$MAX"

用户猜数字

#!/bin/bash&#xA0;&#xA0;#&#xA0;&#x811A;&#x672C;&#x751F;&#x6210;&#x4E00;&#x4E2A;&#xA0;100&#xA0;&#x4EE5;&#x5185;&#x7684;&#x968F;&#x673A;&#x6570;,&#x63D0;&#x793A;&#x7528;&#x6237;&#x731C;&#x6570;&#x5B57;,&#x6839;&#x636E;&#x7528;&#x6237;&#x7684;&#x8F93;&#x5165;,&#x63D0;&#x793A;&#x7528;&#x6237;&#x731C;&#x5BF9;&#x4E86;,#&#xA0;&#x731C;&#x5C0F;&#x4E86;&#x6216;&#x731C;&#x5927;&#x4E86;,&#x76F4;&#x81F3;&#x7528;&#x6237;&#x731C;&#x5BF9;&#x811A;&#x672C;&#x7ED3;&#x675F;&#x3002;# RANDOM &#x4E3A;&#x7CFB;&#x7EDF;&#x81EA;&#x5E26;&#x7684;&#x7CFB;&#x7EDF;&#x53D8;&#x91CF;,&#x503C;&#x4E3A;&#xA0;0&#x2010;32767&#x7684;&#x968F;&#x673A;&#x6570;#&#xA0;&#x4F7F;&#x7528;&#x53D6;&#x4F59;&#x7B97;&#x6CD5;&#x5C06;&#x968F;&#x673A;&#x6570;&#x53D8;&#x4E3A;&#xA0;1&#x2010;100&#xA0;&#x7684;&#x968F;&#x673A;&#x6570;num=$[RANDOM%100+1]echo&#xA0;"$num"&#xA0;#&#xA0;&#x4F7F;&#x7528;&#xA0;read&#xA0;&#x63D0;&#x793A;&#x7528;&#x6237;&#x731C;&#x6570;&#x5B57;#&#xA0;&#x4F7F;&#x7528;&#xA0;if&#xA0;&#x5224;&#x65AD;&#x7528;&#x6237;&#x731C;&#x6570;&#x5B57;&#x7684;&#x5927;&#x5C0F;&#x5173;&#x7CFB;:&#x2010;eq(&#x7B49;&#x4E8E;),&#x2010;ne(&#x4E0D;&#x7B49;&#x4E8E;),&#x2010;gt(&#x5927;&#x4E8E;),&#x2010;ge(&#x5927;&#x4E8E;&#x7B49;&#x4E8E;),#&#xA0;&#x2010;lt(&#x5C0F;&#x4E8E;),&#x2010;le(&#x5C0F;&#x4E8E;&#x7B49;&#x4E8E;)while&#xA0;:do&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;read&#xA0;-p&#xA0;"&#x8BA1;&#x7B97;&#x673A;&#x751F;&#x6210;&#x4E86;&#x4E00;&#x4E2A;&#xA0;1&#x2010;100&#xA0;&#x7684;&#x968F;&#x673A;&#x6570;,&#x4F60;&#x731C;:&#xA0;"&#xA0;cai&#xA0;&#xA0;&#xA0;&#xA0;if&#xA0;[&#xA0;$cai&#xA0;-eq&#xA0;$num&#xA0;]&#xA0;&#xA0;&#xA0;&#xA0;then&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;echo&#xA0;"&#x606D;&#x559C;,&#x731C;&#x5BF9;&#x4E86;"&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;exit&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;elif&#xA0;[&#xA0;$cai&#xA0;-gt&#xA0;$num&#xA0;]&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;then&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;echo&#xA0;"Oops,&#x731C;&#x5927;&#x4E86;"&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;else&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;echo&#xA0;"Oops,&#x731C;&#x5C0F;&#x4E86;"&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;fidone

监测Nginx访问日志502情况,并做相应动作

假设服务器环境为lnmp,近期访问经常出现502现象,且502错误在重启php-fpm服务后消失,因此需要编写监控脚本,一旦出现502,则自动重启php-fpm服务。

#&#x573A;&#x666F;&#xFF1A;<br>#1.&#x8BBF;&#x95EE;&#x65E5;&#x5FD7;&#x6587;&#x4EF6;&#x7684;&#x8DEF;&#x5F84;&#xFF1A;/data/log/access.log<br>#2.&#x811A;&#x672C;&#x6B7B;&#x5FAA;&#x73AF;&#xFF0C;&#x6BCF;10&#x79D2;&#x68C0;&#x6D4B;&#x4E00;&#x6B21;&#xFF0C;10&#x79D2;&#x7684;&#x65E5;&#x5FD7;&#x6761;&#x6570;&#x4E3A;300&#x6761;&#xFF0C;&#x51FA;&#x73B0;502&#x7684;&#x6BD4;&#x4F8B;&#x4E0D;&#x4F4E;&#x4E8E;10%&#xFF08;30&#x6761;&#xFF09;&#x5219;&#x9700;&#x8981;&#x91CD;&#x542F;php-fpm&#x670D;&#x52A1;<br>#3.&#x91CD;&#x542F;&#x547D;&#x4EE4;&#x4E3A;&#xFF1A;/etc/init.d/php-fpm restart<br>#!/bin/bash<br>###########################################################<br>#&#x76D1;&#x6D4B;Nginx&#x8BBF;&#x95EE;&#x65E5;&#x5FD7;502&#x60C5;&#x51B5;&#xFF0C;&#x5E76;&#x505A;&#x76F8;&#x5E94;&#x52A8;&#x4F5C;<br>###########################################################<br>log=/data/log/access.log<br>N=30&#xA0;#&#x8BBE;&#x5B9A;&#x9608;&#x503C;<br>while&#xA0;:<br>do<br>&#xA0;#&#x67E5;&#x770B;&#x8BBF;&#x95EE;&#x65E5;&#x5FD7;&#x7684;&#x6700;&#x65B0;300&#x6761;&#xFF0C;&#x5E76;&#x7EDF;&#x8BA1;502&#x7684;&#x6B21;&#x6570;<br>&#xA0;&#xA0;&#xA0;&#xA0;err=tail -n 300 $log |grep -c '502" '<br>&#xA0;if&#xA0;[&#xA0;$err&#xA0;-ge&#xA0;$N&#xA0;]<br>&#xA0;then<br>&#xA0;/etc/init.d/php-fpm&#xA0;restart&#xA0;2>&#xA0;/dev/null<br>&#xA0;#&#x8BBE;&#x5B9A;60s&#x5EF6;&#x8FDF;&#x9632;&#x6B62;&#x811A;&#x672C;bug&#x5BFC;&#x81F4;&#x65E0;&#x9650;&#x91CD;&#x542F;php-fpm&#x670D;&#x52A1;<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;sleep&#xA0;60<br>&#xA0;fi<br>&#xA0;sleep&#xA0;10<br>done

将结果分别赋值给变量

&#x5E94;&#x7528;&#x573A;&#x666F;&#xFF1A;&#x5E0C;&#x671B;&#x5C06;&#x6267;&#x884C;&#x7ED3;&#x679C;&#x6216;&#x8005;&#x4F4D;&#x7F6E;&#x53C2;&#x6570;&#x8D4B;&#x503C;&#x7ED9;&#x53D8;&#x91CF;&#xFF0C;&#x4EE5;&#x4FBF;&#x540E;&#x7EED;&#x4F7F;&#x7528;&#x3002;<br><br>&#x65B9;&#x6CD5;1&#xFF1A;<br><br>for&#xA0;i&#xA0;in&#xA0;$(echo&#xA0;"4&#xA0;5&#xA0;6");&#xA0;do<br>&#xA0;&#xA0;&#xA0;eval&#xA0;a$i=$i<br>done<br>echo&#xA0;$a4&#xA0;$a5&#xA0;$a6<br>&#x65B9;&#x6CD5;2&#xFF1A;&#x5C06;&#x4F4D;&#x7F6E;&#x53C2;&#x6570;192.168.1.1{1,2}&#x62C6;&#x5206;&#x4E3A;&#x5230;&#x6BCF;&#x4E2A;&#x53D8;&#x91CF;<br><br>num=0<br>for&#xA0;i&#xA0;in&#xA0;$(eval&#xA0;echo&#xA0;$*);do&#xA0;&#xA0;&#xA0;#eval&#x5C06;{1,2}&#x5206;&#x89E3;&#x4E3A;1&#xA0;2<br>&#xA0;&#xA0;&#xA0;let&#xA0;num+=1<br>&#xA0;&#xA0;&#xA0;eval&#xA0;node${num}="$i"<br>done<br>echo&#xA0;$node1&#xA0;$node2&#xA0;$node3<br>#&#xA0;bash&#xA0;a.sh&#xA0;192.168.1.1{1,2}<br>192.168.1.11&#xA0;192.168.1.12<br>&#x65B9;&#x6CD5;3&#xFF1A;<br><br>arr=(4&#xA0;5&#xA0;6)<br>INDEX1=$(echo&#xA0;${arr[0]})<br>INDEX2=$(echo&#xA0;${arr[1]})<br>INDEX3=$(echo&#xA0;${arr[2]})

批量修改文件名

&#x793A;&#x4F8B;&#xFF1A;<br><br>#&#xA0;touch&#xA0;article_{1..3}.html<br>#&#xA0;ls<br>article_1.html&#xA0;&#xA0;article_2.html&#xA0;&#xA0;article_3.html<br>&#x76EE;&#x7684;&#xFF1A;&#x628A;article&#x6539;&#x4E3A;bbs<br><br>&#x65B9;&#x6CD5;1&#xFF1A;<br><br>for&#xA0;file&#xA0;in&#xA0;$(ls&#xA0;*html);&#xA0;do<br>&#xA0;&#xA0;&#xA0;&#xA0;mv&#xA0;$file&#xA0;bbs_${file#*_}<br>&#xA0;&#xA0;&#xA0;&#xA0;#&#xA0;mv&#xA0;$file&#xA0;$(echo&#xA0;$file&#xA0;|sed&#xA0;-r&#xA0;'s/.*(_.*)/bbs\1/')<br>&#xA0;&#xA0;&#xA0;&#xA0;#&#xA0;mv&#xA0;$file&#xA0;$(echo&#xA0;$file&#xA0;|echo&#xA0;bbs_$(cut&#xA0;-d_&#xA0;-f2)<br>done<br>&#x65B9;&#x6CD5;2&#xFF1A;<br><br>for&#xA0;file&#xA0;in&#xA0;$(find&#xA0;.&#xA0;-maxdepth&#xA0;1&#xA0;-name&#xA0;"*html");&#xA0;do<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;mv&#xA0;$file&#xA0;bbs_${file#*_}<br>done<br>&#x65B9;&#x6CD5;3&#xFF1A;<br><br>#&#xA0;rename&#xA0;article&#xA0;bbs&#xA0;*.html

把一个文档前五行中包含字母的行删掉,同时删除6到10行包含的所有字母

1)准备测试文件,文件名为2.txt

&#x7B2C;1&#x884C;1234567&#x4E0D;&#x5305;&#x542B;&#x5B57;&#x6BCD;<br>&#x7B2C;2&#x884C;56789BBBBBB<br>&#x7B2C;3&#x884C;67890CCCCCCCC<br>&#x7B2C;4&#x884C;78asdfDDDDDDDDD<br>&#x7B2C;5&#x884C;123456EEEEEEEE<br>&#x7B2C;6&#x884C;1234567ASDF<br>&#x7B2C;7&#x884C;56789ASDF<br>&#x7B2C;8&#x884C;67890ASDF<br>&#x7B2C;9&#x884C;78asdfADSF<br>&#x7B2C;10&#x884C;123456AAAA<br>&#x7B2C;11&#x884C;67890ASDF<br>&#x7B2C;12&#x884C;78asdfADSF<br>&#x7B2C;13&#x884C;123456AAAA

2)脚本如下:

#!/bin/bash<br>##############################################################<br>#&#x628A;&#x4E00;&#x4E2A;&#x6587;&#x6863;&#x524D;&#x4E94;&#x884C;&#x4E2D;&#x5305;&#x542B;&#x5B57;&#x6BCD;&#x7684;&#x884C;&#x5220;&#x6389;&#xFF0C;&#x540C;&#x65F6;&#x5220;&#x9664;6&#x5230;10&#x884C;&#x5305;&#x542B;&#x7684;&#x6240;&#x6709;&#x5B57;&#x6BCD;<br>##############################################################<br>sed&#xA0;-n&#xA0;'1,5'p&#xA0;2.txt&#xA0;|sed&#xA0;'/[a-zA-Z]/'d<br>sed&#xA0;-n&#xA0;'6,10'p&#xA0;2.txt&#xA0;|sed&#xA0;s'/[a-zA-Z]//'g<br>sed&#xA0;-n&#xA0;'11,$'p&#xA0;2.txt<br>#&#x6700;&#x7EC8;&#x7ED3;&#x679C;&#x53EA;&#x662F;&#x5728;&#x5C4F;&#x5E55;&#x4E0A;&#x6253;&#x5370;&#x7ED3;&#x679C;&#xFF0C;&#x5982;&#x679C;&#x60F3;&#x76F4;&#x63A5;&#x66F4;&#x6539;&#x6587;&#x4EF6;&#xFF0C;&#x53EF;&#x5C06;&#x8F93;&#x51FA;&#x7ED3;&#x679C;&#x5199;&#x5165;&#x4E34;&#x65F6;&#x6587;&#x4EF6;&#x4E2D;&#xFF0C;&#x518D;&#x66FF;&#x6362;2.txt&#x6216;&#x8005;&#x4F7F;&#x7528;-i&#x9009;&#x9879;

统计当前目录中以.html结尾的文件总大

&#x65B9;&#x6CD5;1&#xFF1A;<br><br>#&#xA0;find&#xA0;.&#xA0;-name&#xA0;"*.html"&#xA0;-exec&#xA0;du&#xA0;-k&#xA0;{}&#xA0;\;&#xA0;|awk&#xA0;'{sum+=$1}END{print&#xA0;sum}'<br><br>&#x65B9;&#x6CD5;2&#xFF1A;<br><br>for&#xA0;size&#xA0;in&#xA0;$(ls&#xA0;-l&#xA0;*.html&#xA0;|awk&#xA0;'{print&#xA0;$5}');&#xA0;do<br>&#xA0;&#xA0;&#xA0;&#xA0;sum=$(($sum+$size))<br>done<br>echo&#xA0;$sum

扫描主机端口状态

#!/bin/bash<br>HOST=$1<br>PORT="22&#xA0;25&#xA0;80&#xA0;8080"<br>for&#xA0;PORT&#xA0;in&#xA0;$PORT;&#xA0;do<br>&#xA0;&#xA0;&#xA0;&#xA0;if&#xA0;echo&#xA0;&>/dev/null&#xA0;>&#xA0;/dev/tcp/$HOST/$PORT;&#xA0;then<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;echo&#xA0;"$PORT&#xA0;open"<br>&#xA0;&#xA0;&#xA0;&#xA0;else<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;echo&#xA0;"$PORT&#xA0;close"<br>&#xA0;&#xA0;&#xA0;&#xA0;fi<br>done

用shell打印示例语句中字母数小于6的单词

#&#x793A;&#x4F8B;&#x8BED;&#x53E5;&#xFF1A;<br>#Bash&#xA0;also&#xA0;interprets&#xA0;a&#xA0;number&#xA0;of&#xA0;multi-character&#xA0;options.<br>#!/bin/bash<br>##############################################################<br>#shell&#x6253;&#x5370;&#x793A;&#x4F8B;&#x8BED;&#x53E5;&#x4E2D;&#x5B57;&#x6BCD;&#x6570;&#x5C0F;&#x4E8E;6&#x7684;&#x5355;&#x8BCD;<br>##############################################################<br>for&#xA0;s&#xA0;in&#xA0;Bash&#xA0;also&#xA0;interprets&#xA0;a&#xA0;number&#xA0;of&#xA0;multi-character&#xA0;options.<br>do<br>&#xA0;n=echo $s|wc -c<br>&#xA0;if&#xA0;[&#xA0;$n&#xA0;-lt&#xA0;6&#xA0;]<br>&#xA0;then<br>&#xA0;echo&#xA0;$s<br>&#xA0;fi<br>done

输入数字运行相应命令

#!/bin/bash<br>##############################################################<br>#&#x8F93;&#x5165;&#x6570;&#x5B57;&#x8FD0;&#x884C;&#x76F8;&#x5E94;&#x547D;&#x4EE4;<br>##############################################################<br>echo&#xA0;"*cmd&#xA0;menu*&#xA0;1-date&#xA0;2-ls&#xA0;3-who&#xA0;4-pwd&#xA0;0-exit&#xA0;"<br>while&#xA0;:<br>do<br>#&#x6355;&#x83B7;&#x7528;&#x6237;&#x952E;&#x5165;&#x503C;<br>&#xA0;read&#xA0;-p&#xA0;"please&#xA0;input&#xA0;number&#xA0;:"&#xA0;n<br>&#xA0;n1=echo $n|sed s'/[0-9]//'g<br>#&#x7A7A;&#x8F93;&#x5165;&#x68C0;&#x6D4B;&#xA0;<br>&#xA0;if&#xA0;[&#xA0;-z&#xA0;"$n"&#xA0;]<br>&#xA0;then<br>&#xA0;continue<br>&#xA0;fi<br>#&#x975E;&#x6570;&#x5B57;&#x8F93;&#x5165;&#x68C0;&#x6D4B;&#xA0;<br>&#xA0;if&#xA0;[&#xA0;-n&#xA0;"$n1"&#xA0;]<br>&#xA0;then<br>&#xA0;exit&#xA0;0<br>&#xA0;fi<br>&#xA0;break<br>done<br>case&#xA0;$n&#xA0;in<br>&#xA0;1)<br>&#xA0;date<br>&#xA0;;;<br>&#xA0;2)<br>&#xA0;ls<br>&#xA0;;;<br>&#xA0;3)<br>&#xA0;who<br>&#xA0;;;<br>&#xA0;4)<br>&#xA0;pwd<br>&#xA0;;;<br>&#xA0;0)<br>&#xA0;break<br>&#xA0;;;<br>&#xA0;&#xA0;&#xA0;&#xA0;#&#x8F93;&#x5165;&#x6570;&#x5B57;&#x975E;1-4&#x7684;&#x63D0;&#x793A;<br>&#xA0;*)<br>&#xA0;echo&#xA0;"please&#xA0;input&#xA0;number&#xA0;is&#xA0;[1-4]"<br>esac

Expect实现SSH免交互执行命令

Expect&#x662F;&#x4E00;&#x4E2A;&#x81EA;&#x52A8;&#x4EA4;&#x4E92;&#x5F0F;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x7684;&#x5DE5;&#x5177;&#xFF0C;&#x5982;telnet&#xFF0C;ftp&#xFF0C;passwd&#x7B49;&#x3002;<br><br>&#x9700;&#x5148;&#x5B89;&#x88C5;expect&#x8F6F;&#x4EF6;&#x5305;&#x3002;<br><br>&#x65B9;&#x6CD5;1&#xFF1A;EOF&#x6807;&#x51C6;&#x8F93;&#x51FA;&#x4F5C;&#x4E3A;expect&#x6807;&#x51C6;&#x8F93;&#x5165;<br><br>#!/bin/bash<br>USER=root<br>PASS=123.com<br>IP=192.168.1.120<br>expect&#xA0;<< eof<br>set&#xA0;timeout&#xA0;30<br>spawn&#xA0;ssh&#xA0;$USER@$IP&#xA0;&#xA0;&#xA0;<br>expect&#xA0;{<br>&#xA0;&#xA0;&#xA0;&#xA0;"(yes/no)"&#xA0;{send&#xA0;"yes\r";&#xA0;exp_continue}<br>&#xA0;&#xA0;&#xA0;&#xA0;"password:"&#xA0;{send&#xA0;"$PASS\r"}<br>}<br>expect&#xA0;"$USER@*"&#xA0;&#xA0;{send&#xA0;"$1\r"}<br>expect&#xA0;"$USER@*"&#xA0;&#xA0;{send&#xA0;"exit\r"}<br>expect&#xA0;eof<br>EOF<br>&#x65B9;&#x6CD5;2&#xFF1A;<br><br>#!/bin/bash<br>USER=root<br>PASS=123.com<br>IP=192.168.1.120<br>expect&#xA0;-c&#xA0;"<br>&#xA0;&#xA0;&#xA0;&#xA0;spawn&#xA0;ssh&#xA0;$USER@$IP<br>&#xA0;&#xA0;&#xA0;&#xA0;expect&#xA0;{<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;\"(yes/no)\"&#xA0;{send&#xA0;\"yes\r\";&#xA0;exp_continue}<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;\"password:\"&#xA0;{send&#xA0;\"$PASS\r\";&#xA0;exp_continue}<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;\"$USER@*\"&#xA0;{send&#xA0;\"df&#xA0;-h\r&#xA0;exit\r\";&#xA0;exp_continue}<br>&#xA0;&#xA0;&#xA0;&#xA0;}"<br>&#x65B9;&#x6CD5;3&#xFF1A;&#x5C06;expect&#x811A;&#x672C;&#x72EC;&#x7ACB;&#x51FA;&#x6765;<br><br>&#x767B;&#x5F55;&#x811A;&#x672C;&#xFF1A;<br><br>#&#xA0;cat&#xA0;login.exp<br>#!/usr/bin/expect<br>set&#xA0;ip&#xA0;[lindex&#xA0;$argv&#xA0;0]<br>set&#xA0;user&#xA0;[lindex&#xA0;$argv&#xA0;1]<br>set&#xA0;passwd&#xA0;[lindex&#xA0;$argv&#xA0;2]<br>set&#xA0;cmd&#xA0;[lindex&#xA0;$argv&#xA0;3]<br>if&#xA0;{&#xA0;$argc&#xA0;!=&#xA0;4&#xA0;}&#xA0;{<br>puts&#xA0;"Usage:&#xA0;expect&#xA0;login.exp&#xA0;ip&#xA0;user&#xA0;passwd"<br>exit&#xA0;1<br>}<br>set&#xA0;timeout&#xA0;30<br>spawn&#xA0;ssh&#xA0;$user@$ip<br>expect&#xA0;{<br>&#xA0;&#xA0;&#xA0;&#xA0;"(yes/no)"&#xA0;{send&#xA0;"yes\r";&#xA0;exp_continue}<br>&#xA0;&#xA0;&#xA0;&#xA0;"password:"&#xA0;{send&#xA0;"$passwd\r"}<br>}<br>expect&#xA0;"$user@*"&#xA0;&#xA0;{send&#xA0;"$cmd\r"}<br>expect&#xA0;"$user@*"&#xA0;&#xA0;{send&#xA0;"exit\r"}<br>expect&#xA0;eof<br>&#x6267;&#x884C;&#x547D;&#x4EE4;&#x811A;&#x672C;&#xFF1A;&#x5199;&#x4E2A;&#x5FAA;&#x73AF;&#x53EF;&#x4EE5;&#x6279;&#x91CF;&#x64CD;&#x4F5C;&#x591A;&#x53F0;&#x670D;&#x52A1;&#x5668;<br><br>#!/bin/bash<br>HOST_INFO=user_info.txt<br>for&#xA0;ip&#xA0;in&#xA0;$(awk&#xA0;'{print&#xA0;$1}'&#xA0;$HOST_INFO)<br>do<br>&#xA0;&#xA0;&#xA0;&#xA0;user=$(awk&#xA0;-v&#xA0;I="$ip"&#xA0;'I==$1{print&#xA0;$2}'&#xA0;$HOST_INFO)<br>&#xA0;&#xA0;&#xA0;&#xA0;pass=$(awk&#xA0;-v&#xA0;I="$ip"&#xA0;'I==$1{print&#xA0;$3}'&#xA0;$HOST_INFO)<br>&#xA0;&#xA0;&#xA0;&#xA0;expect&#xA0;login.exp&#xA0;$ip&#xA0;$user&#xA0;$pass&#xA0;$1<br>done<br>Linux&#x4E3B;&#x673A;SSH&#x8FDE;&#x63A5;&#x4FE1;&#x606F;&#xFF1A;<br><br>#&#xA0;cat&#xA0;user_info.txt<br>192.168.1.120&#xA0;root&#xA0;123456<br></ eof

创建10个用户,并分别设置密码,密码要求10位且包含大小写字母以及数字,最后需要把每个用户的密码存在指定文件中

#!/bin/bash<br>##############################################################<br>#&#x521B;&#x5EFA;10&#x4E2A;&#x7528;&#x6237;&#xFF0C;&#x5E76;&#x5206;&#x522B;&#x8BBE;&#x7F6E;&#x5BC6;&#x7801;&#xFF0C;&#x5BC6;&#x7801;&#x8981;&#x6C42;10&#x4F4D;&#x4E14;&#x5305;&#x542B;&#x5927;&#x5C0F;&#x5199;&#x5B57;&#x6BCD;&#x4EE5;&#x53CA;&#x6570;&#x5B57;<br>#&#x6700;&#x540E;&#x9700;&#x8981;&#x628A;&#x6BCF;&#x4E2A;&#x7528;&#x6237;&#x7684;&#x5BC6;&#x7801;&#x5B58;&#x5728;&#x6307;&#x5B9A;&#x6587;&#x4EF6;&#x4E2D;<br>#&#x524D;&#x63D0;&#x6761;&#x4EF6;&#xFF1A;&#x5B89;&#x88C5;mkpasswd&#x547D;&#x4EE4;<br>##############################################################<br>#&#x751F;&#x6210;10&#x4E2A;&#x7528;&#x6237;&#x7684;&#x5E8F;&#x5217;&#xFF08;00-09&#xFF09;<br>for&#xA0;u&#xA0;in&#xA0;seq -w 0 09<br>do<br>&#xA0;#&#x521B;&#x5EFA;&#x7528;&#x6237;<br>&#xA0;useradd&#xA0;user_$u<br>&#xA0;#&#x751F;&#x6210;&#x5BC6;&#x7801;<br>&#xA0;p=mkpasswd -s 0 -l 10<br>&#xA0;#&#x4ECE;&#x6807;&#x51C6;&#x8F93;&#x5165;&#x4E2D;&#x8BFB;&#x53D6;&#x5BC6;&#x7801;&#x8FDB;&#x884C;&#x4FEE;&#x6539;&#xFF08;&#x4E0D;&#x5B89;&#x5168;&#xFF09;<br>&#xA0;echo&#xA0;$p|passwd&#xA0;--stdin&#xA0;user_$u<br>&#xA0;#&#x5E38;&#x89C4;&#x4FEE;&#x6539;&#x5BC6;&#x7801;<br>&#xA0;echo&#xA0;-e&#xA0;"$p\n$p"|passwd&#xA0;user_$u<br>&#xA0;#&#x5C06;&#x521B;&#x5EFA;&#x7684;&#x7528;&#x6237;&#x53CA;&#x5BF9;&#x5E94;&#x7684;&#x5BC6;&#x7801;&#x8BB0;&#x5F55;&#x5230;&#x65E5;&#x5FD7;&#x6587;&#x4EF6;&#x4E2D;<br>&#xA0;echo&#xA0;"user_$u&#xA0;$p"&#xA0;>>&#xA0;/tmp/userpassword<br>done

监控httpd的进程数,根据监控情况做相应处理

#!/bin/bash<br>###############################################################################################################################<br>#&#x9700;&#x6C42;&#xFF1A;<br>#1.&#x6BCF;&#x9694;10s&#x76D1;&#x63A7;httpd&#x7684;&#x8FDB;&#x7A0B;&#x6570;&#xFF0C;&#x82E5;&#x8FDB;&#x7A0B;&#x6570;&#x5927;&#x4E8E;&#x7B49;&#x4E8E;500&#xFF0C;&#x5219;&#x81EA;&#x52A8;&#x91CD;&#x542F;Apache&#x670D;&#x52A1;&#xFF0C;&#x5E76;&#x68C0;&#x6D4B;&#x670D;&#x52A1;&#x662F;&#x5426;&#x91CD;&#x542F;&#x6210;&#x529F;<br>#2.&#x82E5;&#x672A;&#x6210;&#x529F;&#x5219;&#x9700;&#x8981;&#x518D;&#x6B21;&#x542F;&#x52A8;&#xFF0C;&#x82E5;&#x91CD;&#x542F;5&#x6B21;&#x4F9D;&#x65E7;&#x6CA1;&#x6709;&#x6210;&#x529F;&#xFF0C;&#x5219;&#x5411;&#x7BA1;&#x7406;&#x5458;&#x53D1;&#x9001;&#x544A;&#x8B66;&#x90AE;&#x4EF6;&#xFF0C;&#x5E76;&#x9000;&#x51FA;&#x68C0;&#x6D4B;<br>#3.&#x5982;&#x679C;&#x542F;&#x52A8;&#x6210;&#x529F;&#xFF0C;&#x5219;&#x7B49;&#x5F85;1&#x5206;&#x949F;&#x540E;&#x518D;&#x6B21;&#x68C0;&#x6D4B;httpd&#x8FDB;&#x7A0B;&#x6570;&#xFF0C;&#x82E5;&#x8FDB;&#x7A0B;&#x6570;&#x6B63;&#x5E38;&#xFF0C;&#x5219;&#x6062;&#x590D;&#x6B63;&#x5E38;&#x68C0;&#x6D4B;&#xFF08;10s&#x4E00;&#x6B21;&#xFF09;&#xFF0C;&#x5426;&#x5219;&#x653E;&#x5F03;&#x91CD;&#x542F;&#x5E76;&#x5411;&#x7BA1;&#x7406;&#x5458;&#x53D1;&#x9001;&#x544A;&#x8B66;&#x90AE;&#x4EF6;&#xFF0C;&#x5E76;&#x9000;&#x51FA;&#x68C0;&#x6D4B;<br>###############################################################################################################################<br>#&#x8BA1;&#x6570;&#x5668;&#x51FD;&#x6570;<br>check_service()<br>{<br>&#xA0;j=0<br>&#xA0;for&#xA0;i&#xA0;in&#xA0;seq 1 5&#xA0;<br>&#xA0;do<br>&#xA0;#&#x91CD;&#x542F;Apache&#x7684;&#x547D;&#x4EE4;<br>&#xA0;/usr/local/apache2/bin/apachectl&#xA0;restart&#xA0;2>&#xA0;/var/log/httpderr.log<br>&#xA0;&#xA0;&#xA0;&#xA0;#&#x5224;&#x65AD;&#x670D;&#x52A1;&#x662F;&#x5426;&#x91CD;&#x542F;&#x6210;&#x529F;<br>&#xA0;if&#xA0;[&#xA0;$?&#xA0;-eq&#xA0;0&#xA0;]<br>&#xA0;then<br>&#xA0;break<br>&#xA0;else<br>&#xA0;j=$[$j+1]<br>&#xA0;fi<br>&#xA0;&#xA0;&#xA0;&#xA0;#&#x5224;&#x65AD;&#x670D;&#x52A1;&#x662F;&#x5426;&#x5DF2;&#x5C1D;&#x8BD5;&#x91CD;&#x542F;5&#x6B21;<br>&#xA0;if&#xA0;[&#xA0;$j&#xA0;-eq&#xA0;5&#xA0;]<br>&#xA0;then<br>&#xA0;mail.py<br>&#xA0;exit<br>&#xA0;fi<br>&#xA0;done&#xA0;<br>}<br>while&#xA0;:<br>do<br>&#xA0;n=pgrep -l httpd|wc -l<br>&#xA0;#&#x5224;&#x65AD;httpd&#x670D;&#x52A1;&#x8FDB;&#x7A0B;&#x6570;&#x662F;&#x5426;&#x8D85;&#x8FC7;500<br>&#xA0;if&#xA0;[&#xA0;$n&#xA0;-gt&#xA0;500&#xA0;]<br>&#xA0;then<br>&#xA0;/usr/local/apache2/bin/apachectl&#xA0;restart<br>&#xA0;if&#xA0;[&#xA0;$?&#xA0;-ne&#xA0;0&#xA0;]<br>&#xA0;then<br>&#xA0;check_service<br>&#xA0;else<br>&#xA0;sleep&#xA0;60<br>&#xA0;n2=pgrep -l httpd|wc -l<br>&#xA0;#&#x5224;&#x65AD;&#x91CD;&#x542F;&#x540E;&#x662F;&#x5426;&#x4F9D;&#x65E7;&#x8D85;&#x8FC7;500<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;if&#xA0;[&#xA0;$n2&#xA0;-gt&#xA0;500&#xA0;]<br>&#xA0;then&#xA0;<br>&#xA0;mail.py<br>&#xA0;exit<br>&#xA0;fi<br>&#xA0;fi<br>&#xA0;fi<br>&#xA0;#&#x6BCF;&#x9694;10s&#x68C0;&#x6D4B;&#x4E00;&#x6B21;<br>&#xA0;sleep&#xA0;10<br>done

批量修改服务器用户密码

Linux&#x4E3B;&#x673A;SSH&#x8FDE;&#x63A5;&#x4FE1;&#x606F;&#xFF1A;&#x65E7;&#x5BC6;&#x7801;<br><br>#&#xA0;cat&#xA0;old_pass.txt&#xA0;<br>192.168.18.217&#xA0;&#xA0;root&#xA0;&#xA0;&#xA0;&#xA0;123456&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;22<br>192.168.18.218&#xA0;&#xA0;root&#xA0;&#xA0;&#xA0;&#xA0;123456&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;22<br>&#x5185;&#x5BB9;&#x683C;&#x5F0F;&#xFF1A;IP User Password Port<br><br>SSH&#x8FDC;&#x7A0B;&#x4FEE;&#x6539;&#x5BC6;&#x7801;&#x811A;&#x672C;&#xFF1A;&#x65B0;&#x5BC6;&#x7801;&#x968F;&#x673A;&#x751F;&#x6210;<br>https://www.linuxprobe.com/books<br>#!/bin/bash<br>OLD_INFO=old_pass.txt<br>NEW_INFO=new_pass.txt<br>for&#xA0;IP&#xA0;in&#xA0;$(awk&#xA0;'/^[^#]/{print&#xA0;$1}'&#xA0;$OLD_INFO);&#xA0;do<br>&#xA0;&#xA0;&#xA0;&#xA0;USER=$(awk&#xA0;-v&#xA0;I=$IP&#xA0;'I==$1{print&#xA0;$2}'&#xA0;$OLD_INFO)<br>&#xA0;&#xA0;&#xA0;&#xA0;PASS=$(awk&#xA0;-v&#xA0;I=$IP&#xA0;'I==$1{print&#xA0;$3}'&#xA0;$OLD_INFO)<br>&#xA0;&#xA0;&#xA0;&#xA0;PORT=$(awk&#xA0;-v&#xA0;I=$IP&#xA0;'I==$1{print&#xA0;$4}'&#xA0;$OLD_INFO)<br>&#xA0;&#xA0;&#xA0;&#xA0;NEW_PASS=$(mkpasswd&#xA0;-l&#xA0;8)&#xA0;&#xA0;#&#xA0;&#x968F;&#x673A;&#x5BC6;&#x7801;<br>&#xA0;&#xA0;&#xA0;&#xA0;echo&#xA0;"$IP&#xA0;&#xA0;&#xA0;$USER&#xA0;&#xA0;&#xA0;$NEW_PASS&#xA0;&#xA0;&#xA0;$PORT"&#xA0;>>&#xA0;$NEW_INFO<br>&#xA0;&#xA0;&#xA0;&#xA0;expect&#xA0;-c&#xA0;"<br>&#xA0;&#xA0;&#xA0;&#xA0;spawn&#xA0;ssh&#xA0;-p$PORT&#xA0;$USER@$IP<br>&#xA0;&#xA0;&#xA0;&#xA0;set&#xA0;timeout&#xA0;2<br>&#xA0;&#xA0;&#xA0;&#xA0;expect&#xA0;{<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;\"(yes/no)\"&#xA0;{send&#xA0;\"yes\r\";exp_continue}<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;\"password:\"&#xA0;{send&#xA0;\"$PASS\r\";exp_continue}<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;\"$USER@*\"&#xA0;{send&#xA0;\"echo&#xA0;\'$NEW_PASS\'&#xA0;|passwd&#xA0;--stdin&#xA0;$USER\r&#xA0;exit\r\";exp_continue}<br>&#xA0;&#xA0;&#xA0;&#xA0;}"<br>done<br>&#x751F;&#x6210;&#x65B0;&#x5BC6;&#x7801;&#x6587;&#x4EF6;&#xFF1A;<br><br>#&#xA0;cat&#xA0;new_pass.txt&#xA0;<br>192.168.18.217&#xA0;&#xA0;root&#xA0;&#xA0;&#xA0;&#xA0;n8wX3mU%&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;22<br>192.168.18.218&#xA0;&#xA0;root&#xA0;&#xA0;&#xA0;&#xA0;c87;ZnnL&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;22

iptables自动屏蔽访问网站频繁的IP

&#x573A;&#x666F;&#xFF1A;&#x6076;&#x610F;&#x8BBF;&#x95EE;,&#x5B89;&#x5168;&#x9632;&#x8303;<br><br>1&#xFF09;&#x5C4F;&#x853D;&#x6BCF;&#x5206;&#x949F;&#x8BBF;&#x95EE;&#x8D85;&#x8FC7;200&#x7684;IP<br><br>&#x65B9;&#x6CD5;1&#xFF1A;&#x6839;&#x636E;&#x8BBF;&#x95EE;&#x65E5;&#x5FD7;&#xFF08;Nginx&#x4E3A;&#x4F8B;&#xFF09;<br><br>#!/bin/bash<br>DATE=$(date&#xA0;+%d/%b/%Y:%H:%M)<br>ABNORMAL_IP=$(tail&#xA0;-n5000&#xA0;access.log&#xA0;|grep&#xA0;$DATE&#xA0;|awk&#xA0;'{a[$1]++}END{for(i&#xA0;in&#xA0;a)if(a[i]>100)print&#xA0;i}')<br>#&#x5148;tail&#x9632;&#x6B62;&#x6587;&#x4EF6;&#x8FC7;&#x5927;&#xFF0C;&#x8BFB;&#x53D6;&#x6162;&#xFF0C;&#x6570;&#x5B57;&#x53EF;&#x8C03;&#x6574;&#x6BCF;&#x5206;&#x949F;&#x6700;&#x5927;&#x7684;&#x8BBF;&#x95EE;&#x91CF;&#x3002;awk&#x4E0D;&#x80FD;&#x76F4;&#x63A5;&#x8FC7;&#x6EE4;&#x65E5;&#x5FD7;&#xFF0C;&#x56E0;&#x4E3A;&#x5305;&#x542B;&#x7279;&#x6B8A;&#x5B57;&#x7B26;&#x3002;<br>for&#xA0;IP&#xA0;in&#xA0;$ABNORMAL_IP;&#xA0;do<br>&#xA0;&#xA0;&#xA0;&#xA0;if&#xA0;[&#xA0;$(iptables&#xA0;-vnL&#xA0;|grep&#xA0;-c&#xA0;"$IP")&#xA0;-eq&#xA0;0&#xA0;];&#xA0;then<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;iptables&#xA0;-I&#xA0;INPUT&#xA0;-s&#xA0;$IP&#xA0;-j&#xA0;DROP<br>&#xA0;&#xA0;&#xA0;&#xA0;fi<br>done<br>&#x65B9;&#x6CD5;2&#xFF1A;&#x901A;&#x8FC7;TCP&#x5EFA;&#x7ACB;&#x7684;&#x8FDE;&#x63A5;<br><br>#!/bin/bash<br>ABNORMAL_IP=$(netstat&#xA0;-an&#xA0;|awk&#xA0;'$4~/:80$/&#xA0;&&&#xA0;$6~/ESTABLISHED/{gsub(/:[0-9]+/,"",$5);{a[$5]++}}END{for(i&#xA0;in&#xA0;a)if(a[i]>100)print&#xA0;i}')<br>#gsub&#x662F;&#x5C06;&#x7B2C;&#x4E94;&#x5217;&#xFF08;&#x5BA2;&#x6237;&#x7AEF;IP&#xFF09;&#x7684;&#x5192;&#x53F7;&#x548C;&#x7AEF;&#x53E3;&#x53BB;&#x6389;<br>for&#xA0;IP&#xA0;in&#xA0;$ABNORMAL_IP;&#xA0;do<br>&#xA0;&#xA0;&#xA0;&#xA0;if&#xA0;[&#xA0;$(iptables&#xA0;-vnL&#xA0;|grep&#xA0;-c&#xA0;"$IP")&#xA0;-eq&#xA0;0&#xA0;];&#xA0;then<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;iptables&#xA0;-I&#xA0;INPUT&#xA0;-s&#xA0;$IP&#xA0;-j&#xA0;DROP<br>&#xA0;&#xA0;&#xA0;&#xA0;fi<br>done<br><br>2&#xFF09;&#x5C4F;&#x853D;&#x6BCF;&#x5206;&#x949F;SSH&#x5C1D;&#x8BD5;&#x767B;&#x5F55;&#x8D85;&#x8FC7;10&#x6B21;&#x7684;IP<br><br>&#x65B9;&#x6CD5;1&#xFF1A;&#x901A;&#x8FC7;lastb&#x83B7;&#x53D6;&#x767B;&#x5F55;&#x72B6;&#x6001;:<br><br>#!/bin/bash<br>DATE=$(date&#xA0;+"%a&#xA0;%b&#xA0;%e&#xA0;%H:%M")&#xA0;#&#x661F;&#x671F;&#x6708;&#x5929;&#x65F6;&#x5206;&#xA0;&#xA0;%e&#x5355;&#x6570;&#x5B57;&#x65F6;&#x663E;&#x793A;7&#xFF0C;&#x800C;%d&#x663E;&#x793A;07<br>ABNORMAL_IP=$(lastb&#xA0;|grep&#xA0;"$DATE"&#xA0;|awk&#xA0;'{a[$3]++}END{for(i&#xA0;in&#xA0;a)if(a[i]>10)print&#xA0;i}')<br>for&#xA0;IP&#xA0;in&#xA0;$ABNORMAL_IP;&#xA0;do<br>&#xA0;&#xA0;&#xA0;&#xA0;if&#xA0;[&#xA0;$(iptables&#xA0;-vnL&#xA0;|grep&#xA0;-c&#xA0;"$IP")&#xA0;-eq&#xA0;0&#xA0;];&#xA0;then<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;iptables&#xA0;-I&#xA0;INPUT&#xA0;-s&#xA0;$IP&#xA0;-j&#xA0;DROP<br>&#xA0;&#xA0;&#xA0;&#xA0;fi<br>done<br>&#x65B9;&#x6CD5;2&#xFF1A;&#x901A;&#x8FC7;&#x65E5;&#x5FD7;&#x83B7;&#x53D6;&#x767B;&#x5F55;&#x72B6;&#x6001;<br><br>#!/bin/bash<br>DATE=$(date&#xA0;+"%b&#xA0;%d&#xA0;%H")<br>ABNORMAL_IP="$(tail&#xA0;-n10000&#xA0;/var/log/auth.log&#xA0;|grep&#xA0;"$DATE"&#xA0;|awk&#xA0;'/Failed/{a[$(NF-3)]++}END{for(i&#xA0;in&#xA0;a)if(a[i]>5)print&#xA0;i}')"<br>for&#xA0;IP&#xA0;in&#xA0;$ABNORMAL_IP;&#xA0;do<br>&#xA0;&#xA0;&#xA0;&#xA0;if&#xA0;[&#xA0;$(iptables&#xA0;-vnL&#xA0;|grep&#xA0;-c&#xA0;"$IP")&#xA0;-eq&#xA0;0&#xA0;];&#xA0;then<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;iptables&#xA0;-A&#xA0;INPUT&#xA0;-s&#xA0;$IP&#xA0;-j&#xA0;DROP<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;echo&#xA0;"$(date&#xA0;+"%F&#xA0;%T")&#xA0;-&#xA0;iptables&#xA0;-A&#xA0;INPUT&#xA0;-s&#xA0;$IP&#xA0;-j&#xA0;DROP"&#xA0;>>~/ssh-login-limit.log<br>&#xA0;&#xA0;&#xA0;&#xA0;fi<br>done

根据web访问日志,封禁请求量异常的IP,如IP在半小时后恢复正常,则解除封禁

#!/bin/bash<br>####################################################################################<br>#&#x6839;&#x636E;web&#x8BBF;&#x95EE;&#x65E5;&#x5FD7;&#xFF0C;&#x5C01;&#x7981;&#x8BF7;&#x6C42;&#x91CF;&#x5F02;&#x5E38;&#x7684;IP&#xFF0C;&#x5982;IP&#x5728;&#x534A;&#x5C0F;&#x65F6;&#x540E;&#x6062;&#x590D;&#x6B63;&#x5E38;&#xFF0C;&#x5219;&#x89E3;&#x9664;&#x5C01;&#x7981;<br>####################################################################################<br>logfile=/data/log/access.log<br>#&#x663E;&#x793A;&#x4E00;&#x5206;&#x949F;&#x524D;&#x7684;&#x5C0F;&#x65F6;&#x548C;&#x5206;&#x949F;<br>d1=date -d "-1 minute" +%H%M<br>d2=date +%M<br>ipt=/sbin/iptables<br>ips=/tmp/ips.txt<br>block()<br>{<br>&#xA0;#&#x5C06;&#x4E00;&#x5206;&#x949F;&#x524D;&#x7684;&#x65E5;&#x5FD7;&#x5168;&#x90E8;&#x8FC7;&#x6EE4;&#x51FA;&#x6765;&#x5E76;&#x63D0;&#x53D6;IP&#x4EE5;&#x53CA;&#x7EDF;&#x8BA1;&#x8BBF;&#x95EE;&#x6B21;&#x6570;<br>&#xA0;grep&#xA0;'$d1:'&#xA0;$logfile|awk&#xA0;'{print&#xA0;$1}'|sort&#xA0;-n|uniq&#xA0;-c|sort&#xA0;-n&#xA0;>&#xA0;$ips<br>&#xA0;#&#x5229;&#x7528;for&#x5FAA;&#x73AF;&#x5C06;&#x6B21;&#x6570;&#x8D85;&#x8FC7;100&#x7684;IP&#x4F9D;&#x6B21;&#x904D;&#x5386;&#x51FA;&#x6765;&#x5E76;&#x4E88;&#x4EE5;&#x5C01;&#x7981;<br>&#xA0;for&#xA0;i&#xA0;in&#xA0;awk '$1>100 {print $2}' $ips<br>&#xA0;do<br>&#xA0;$ipt&#xA0;-I&#xA0;INPUT&#xA0;-p&#xA0;tcp&#xA0;--dport&#xA0;80&#xA0;-s&#xA0;$i&#xA0;-j&#xA0;REJECT<br>&#xA0;echo&#xA0;"date +%F-%T&#xA0;$i"&#xA0;>>&#xA0;/tmp/badip.log<br>&#xA0;done<br>}<br>unblock()<br>{<br>&#xA0;#&#x5C06;&#x5C01;&#x7981;&#x540E;&#x6240;&#x4EA7;&#x751F;&#x7684;pkts&#x6570;&#x91CF;&#x5C0F;&#x4E8E;10&#x7684;IP&#x4F9D;&#x6B21;&#x904D;&#x5386;&#x4E88;&#x4EE5;&#x89E3;&#x5C01;<br>&#xA0;for&#xA0;a&#xA0;in&#xA0;$ipt -nvL INPUT --line-numbers |grep '0.0.0.0/0'|awk '$2<10 {print $1}'|sort -nr<br>&#xA0;do&#xA0;<br>&#xA0;$ipt&#xA0;-D&#xA0;INPUT&#xA0;$a<br>&#xA0;done<br>&#xA0;$ipt&#xA0;-Z<br>}<br>#&#x5F53;&#x65F6;&#x95F4;&#x5728;00&#x5206;&#x4EE5;&#x53CA;30&#x5206;&#x65F6;&#x6267;&#x884C;&#x89E3;&#x5C01;&#x51FD;&#x6570;<br>if&#xA0;[&#xA0;$d2&#xA0;-eq&#xA0;"00"&#xA0;]&#xA0;||&#xA0;[&#xA0;$d2&#xA0;-eq&#xA0;"30"&#xA0;]<br>&#xA0;then<br>&#xA0;#&#x8981;&#x5148;&#x89E3;&#x518D;&#x5C01;&#xFF0C;&#x56E0;&#x4E3A;&#x521A;&#x521A;&#x5C01;&#x7981;&#x65F6;&#x4EA7;&#x751F;&#x7684;pkts&#x6570;&#x91CF;&#x5F88;&#x5C11;<br>&#xA0;unblock<br>&#xA0;block<br>&#xA0;else<br>&#xA0;block<br>fi<br></10 {print $1}'|sort -nr`

判断用户输入的是否为IP地址

&#x65B9;&#x6CD5;1:<br><br>#!/bin/bash<br>function&#xA0;check_ip(){<br>&#xA0;&#xA0;&#xA0;&#xA0;IP=$1<br>&#xA0;&#xA0;&#xA0;&#xA0;VALID_CHECK=$(echo&#xA0;$IP|awk&#xA0;-F.&#xA0;'$1< =255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')<br>&#xA0;&#xA0;&#xA0;&#xA0;if&#xA0;echo&#xA0;$IP|grep&#xA0;-E&#xA0;"^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$">/dev/null;&#xA0;then<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;if&#xA0;[&#xA0;$VALID_CHECK&#xA0;==&#xA0;"yes"&#xA0;];&#xA0;then<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;echo&#xA0;"$IP&#xA0;available."<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;else<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;echo&#xA0;"$IP&#xA0;not&#xA0;available!"<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;fi<br>&#xA0;&#xA0;&#xA0;&#xA0;else<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;echo&#xA0;"Format&#xA0;error!"<br>&#xA0;&#xA0;&#xA0;&#xA0;fi<br>}<br>check_ip&#xA0;192.168.1.1<br>check_ip&#xA0;256.1.1.1<br>&#x65B9;&#x6CD5;2&#xFF1A;<br><br>#!/bin/bash<br>function&#xA0;check_ip(){<br>&#xA0;&#xA0;&#xA0;&#xA0;IP=$1<br>&#xA0;&#xA0;&#xA0;&#xA0;if&#xA0;[[&#xA0;$IP&#xA0;=~&#xA0;^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$&#xA0;]];&#xA0;then<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;FIELD1=$(echo&#xA0;$IP|cut&#xA0;-d.&#xA0;-f1)<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;FIELD2=$(echo&#xA0;$IP|cut&#xA0;-d.&#xA0;-f2)<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;FIELD3=$(echo&#xA0;$IP|cut&#xA0;-d.&#xA0;-f3)<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;FIELD4=$(echo&#xA0;$IP|cut&#xA0;-d.&#xA0;-f4)<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;if&#xA0;[&#xA0;$FIELD1&#xA0;-le&#xA0;255&#xA0;-a&#xA0;$FIELD2&#xA0;-le&#xA0;255&#xA0;-a&#xA0;$FIELD3&#xA0;-le&#xA0;255&#xA0;-a&#xA0;$FIELD4&#xA0;-le&#xA0;255&#xA0;];&#xA0;then<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;echo&#xA0;"$IP&#xA0;available."<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;else<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;echo&#xA0;"$IP&#xA0;not&#xA0;available!"<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;fi<br>&#xA0;&#xA0;&#xA0;&#xA0;else<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;echo&#xA0;"Format&#xA0;error!"<br>&#xA0;&#xA0;&#xA0;&#xA0;fi<br>}<br>check_ip&#xA0;192.168.1.1<br>check_ip&#xA0;256.1.1.1<br>&#x589E;&#x52A0;&#x7248;&#xFF1A;<br><br>&#x52A0;&#x4E2A;&#x6B7B;&#x5FAA;&#x73AF;&#xFF0C;&#x5982;&#x679C;IP&#x53EF;&#x7528;&#x5C31;&#x9000;&#x51FA;&#xFF0C;&#x4E0D;&#x53EF;&#x7528;&#x63D0;&#x793A;&#x7EE7;&#x7EED;&#x8F93;&#x5165;&#xFF0C;&#x5E76;&#x4F7F;&#x7528;awk&#x5224;&#x65AD;&#x3002;<br><br>#!/bin/bash<br>function&#xA0;check_ip(){<br>&#xA0;&#xA0;&#xA0;&#xA0;local&#xA0;IP=$1<br>&#xA0;&#xA0;&#xA0;&#xA0;VALID_CHECK=$(echo&#xA0;$IP|awk&#xA0;-F.&#xA0;'$1< =255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')<br>&#xA0;&#xA0;&#xA0;&#xA0;if&#xA0;echo&#xA0;$IP|grep&#xA0;-E&#xA0;"^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$"&#xA0;>/dev/null;&#xA0;then<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;if&#xA0;[&#xA0;$VALID_CHECK&#xA0;==&#xA0;"yes"&#xA0;];&#xA0;then<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;return&#xA0;0<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;else<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;echo&#xA0;"$IP&#xA0;not&#xA0;available!"<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;return&#xA0;1<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;fi<br>&#xA0;&#xA0;&#xA0;&#xA0;else<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;echo&#xA0;"Format&#xA0;error!&#xA0;Please&#xA0;input&#xA0;again."<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;return&#xA0;1<br>&#xA0;&#xA0;&#xA0;&#xA0;fi<br>}<br>while&#xA0;true;&#xA0;do<br>&#xA0;&#xA0;&#xA0;&#xA0;read&#xA0;-p&#xA0;"Please&#xA0;enter&#xA0;IP:&#xA0;"&#xA0;IP<br>&#xA0;&#xA0;&#xA0;&#xA0;check_ip&#xA0;$IP<br>&#xA0;&#xA0;&#xA0;&#xA0;[&#xA0;$?&#xA0;-eq&#xA0;0&#xA0;]&#xA0;&&&#xA0;break&#xA0;||&#xA0;continue<br>done</ =255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')<br></ =255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')

技术微信群:

加微信:wonter 发送:技术Q

医疗微信群:

加微信:wonter 发送:医疗Q

更多文章关注公众号:

非常实用的 Shell 脚本

Original: https://www.cnblogs.com/Javame/p/14681591.html
Author: CTO老王
Title: 非常实用的 Shell 脚本

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/529635/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • muduo源码分析之muduo简单运用

    今天不先实现 muduo项目,我们先来看下 muduo库的基本使用,只有了解了如何用,才能在写代码的时候知道自己写的找个函数是干嘛的,实际上是怎么使用的这个函数。首先说简单点,就是…

    Linux 2023年6月13日
    093
  • pwm驱动

    1.1、参考博客 参考的教程如下: 1.2、什么是PWM 脉冲宽度调制(PWM),是英文”Pulse Width Modulation”的缩写,简称脉宽调制…

    Linux 2023年6月13日
    0112
  • NO.6 HTML+CSS 笔记

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月7日
    0104
  • Vmware部署Linux无人值守安装Centos7系统

    Linux – 无人值守安装服务 需求分析 – 使用光盘镜像来安装 Linux 系统的方式; 坦白讲, 该方法适用于只安装少量 Linux 系统的情况, 如果生产环境中…

    Linux 2023年6月13日
    0113
  • 5.1 Vim及其安装

    通过前面的学习我们知道,Linux 系统中”一切皆文件”,因此当我们在命令行下更改文件内容时,不可避免地要用到文本编辑器。 作为一名 Linux 初学者,你…

    Linux 2023年6月7日
    0103
  • [云计算]TCA云架构-思维导图

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/Skybiubiu/p/15962992.htmlAut…

    Linux 2023年6月13日
    0134
  • shell升级完整记录

    [root@localhost bash-4.3.30]# cat Makefile |grep prefix prefix = /usr/local exec_prefix = …

    Linux 2023年5月28日
    079
  • 升级macOS Big Sur 后 HIDPI 失效的解决办法【转】

    半年前升级了一次MacOS就导致HiDPI失效,找了好久终于找到了解决办法,见这篇文章。 今天看到Mac又推送了更新,果断冲了Big Sur,结果HiDPI又一次失效。人真的是不长…

    Linux 2023年6月8日
    0138
  • 树莓派Raspiberry 编译Linux实时内核PREEMPT-RT 实战

    树莓派4B 实时内核(Preempt_RT)的配置和编译https://blog.csdn.net/zlp_zky/article/details/114994444 基本按照这个…

    Linux 2023年6月7日
    0115
  • 使用idea操作git(ssh协议)

    问题 我们发现,使用IDEA上的git功能,当使用ssh协议出现了可以commit但无法push和pull的问题,经过测试发现原因是Could not read from rems…

    Linux 2023年6月6日
    0138
  • 卡尔曼滤波(Kalman filter)(不完全介绍)

    1. Kalman filter基本介绍 卡尔曼滤波(Kalman filter)是一种高效的自回归滤波器,它能在存在诸多不确定性情况的组合信息中估计动态系统的状态,是一种强大的、…

    Linux 2023年6月14日
    0112
  • Linux02:Vim使用及账号、磁盘、进程管理(狂神说)

    五、Vim编译器 1.什么是vim编译器 Vim相当于vi的升级版 Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使…

    Linux 2023年5月27日
    0114
  • ThinkPHP 使用 think-queue 实现 redis 消息队列

    简单介绍:消息队列中间件是大型系统中的重要组件,已经逐渐成为企业系统内部通信的核心手段。它具有松耦合、异步消息、流量削峰、可靠投递、广播、流量控制、最终一致性等一系列功能,已经成为…

    Linux 2023年5月28日
    0103
  • Centos7.9编译OpenSSH的rpm安装包并升级OpenSSH

    本文介绍如何通过openssh-9.0p1.tar.gz制作openssh的rpm安装包,并升级openssh到9.0。 下载openssh-9.0p1.tar.gz 编译成rpm…

    Linux 2023年6月7日
    0112
  • Java 注解及其底层原理

    什么是注解? 注解的分类 Java自带的标准注解 元注解 @Retention @Documented @Target @Inherited @Repeatable 自定义注解 自…

    Linux 2023年6月6日
    0135
  • 更快的排序——归并排序!基于分而治之的对数复杂度的排序Merge Sort

    Merge Sort Algorithm The merge sort algorithm is defined recursively: If the list is of si…

    Linux 2023年6月13日
    097
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球