我们为你整理了23个例子。通过23个实战经典剧本实例,即时使用,根据你的需求直接使用。我们为你整理了23个例子。希望这篇文章对你有帮助。
Shell脚本是帮助程序员和系统管理员完成繁琐费时的工作的有力工具,是与计算机交互、管理文件和系统操作的有效方式。只需几行代码,你就可以让计算机接近按照你的意图行动。
我们为大家整理了23个实例,通过23个实战经典脚本实例展示了shell脚本编程的实用技术和常用工具用法。你只需要根据自己的需求,将本文中的这些常用任务和可移植的自动化脚本应用到其他类似的问题中,就可以解决每三天发生一次的麻烦。
#!/bin/bash
#####################################
#检查两台服务器的指定目录中的文件一致性。
#####################################
#通过比较两台服务器上文件的md5值,可以检查一致性。
dir=/data/web
b_ip=192.168.88.10
#遍历指定目录下的所有文件,作为md5sum命令的参数,然后获取所有文件的md5值,写入指定文件。
查找$ dir-type f | xargs MD5 sum/tmp/MD5 _ a . txt
ssh $ b _ IP ' find $ dir-type f | xargs MD5 sum/tmp/MD5 _ b . txt '
scp $b_ip:/tmp/md5_b.txt /tmp
#逐个比较文件名作为遍历对象。
对于` awk '{print 2} /tmp/md5_a.txt ' `中的f
做
#以机器A为标准,当机器B不存在遍历对象中的文件时,会直接输出不存在的结果。
if grep -qw '$f' /tmp/md5_b.txt
然后
MD5 _ a=` grep-w ' $ f '/tmp/MD5 _ a . txt | awk ' { print 1 } ' '
MD5 _ b=` grep-w ' $ f '/tmp/MD5 _ b . txt | awk ' { print 1 } ' '
#当文件存在时,如果md5值不一致,输出文件更改的结果。
if [ $md5_a!=$md5_b ]
然后
回显“$f已更改。”
船方不负担装货费用
其他
回显“已删除$f”
船方不负担装货费用
完成的
定期清理文件内容,定期记录文件大小。
#!/bin/bash
################################################################
#每小时执行一次脚本(任务计划)。当时间是0点或12点时,目标目录中的所有文件将
#容量被清除,但文件不会被删除。在其他时候,只计算每个文件的大小,每行一个文件,并输出到按时间#和日期命名的文件中。应该考虑目标目录的第二个和第三个子目录中的文件。
################################################################
logfile=/tmp/`date %H-%F`.log
n=`日期%H '
if [ $n -eq 00 ] || [ $n -eq 12 ]
然后
#通过for循环遍历目标目录下的所有文件,以find命令为遍历条件,做相应的操作。
对于“查找/数据/日志/”中的I,键入f
做
false $ I
完成的
其他
对于“查找/数据/日志/”中的I,键入f
做
du-sh $ I $日志文件
完成的
船方不负担装货费用
检测网卡流量,并按照规定的格式记录在日志中。
#!/bin/bash
#######################################################
#检测网卡流量,并按照规定的格式记录在日志中。
#规定每一分钟都要记录。
#日志格式如下:
#2019-08-12 20:40
#ens33输入:1234bps
输出:1235bps
######################################################3
同时:
做
#将语言设置为英文,确保输出结果是英文,否则会出现bug。
LANG=en
logfile=/tmp/`date %d`.log
#将以下命令的结果输出重定向到日志文件log
exec $日志文件
日期“%F %H:%M”
#sar命令以kb/s为单位统计流量,log格式为bps,所以应该是*1000*8。
sar-n DEV 1 59 | grep Average | grep ens 33 | awk ' { print $2,' \t ',' input:',' \t ',$5*1000*8,' bps ',' \n ',$ 2,' \t ',' \t ',' \ t ',$6*1000*8,' bps'} '
回显' ################ '
#因为执行sar命令需要59秒,所以不需要睡眠
完成的
计算文档每行的位数,计算整个文档的总位数。
#!/bin/bash
#########################################################
#统计文档每行的位数,计算整个文档的总位数。
########################################################
#使用awk只输出文档行数(截取第一段)
n=`wc -l a.txt|awk '{print $1} ' '
总和=0
#文档中每一行可能都有空格,所以不能被文档内容直接遍历。
对于“序列1 $n”中的I
做
#当输出行由变量表示时,需要双引号。
line=' sed-n ' I ' p a . txt '
#wc -L选项,统计最长线的长度。
n _ n=' echo $ line | sed s'/[^0-9]//'g|wc-l '
回声$n_n
sum=$[$sum $n_n]
完成的
echo 'sum:$sum '
杀死所有脚本
#!/bin/bash
################################################################
#一些脚本已经被添加到cron中,并且存在脚本没有完成运行并且需要执行新任务的情况,
#导致系统负载上升,所以可以通过写脚本的方式筛选出影响负载的进程,一次性全部杀死。
################################################################
Ps aux|grep指定进程名称| grep-v grep | awk“{ print $ 2 }”| xargs kill-9
从FTP服务器下载文件
#!/bin/bash
if[$ #-ne 1];然后
“回显”用法:$0文件名
船方不负担装货费用
目录=$(目录名$1)
文件=$(基本名称$1)
自动登录
打开192.168.1.10 # ftp服务器
用户管理员密码
Binary #将ftp传输模式设置为二进制,以避免不同的MD5值或tar.gz压缩包的格式错误。
cd $dir
获取' $file '
文件结束
输入100以内的五个连续数字,并计算总和、最小值和最大值。
#!/bin/bash
计数=1
总和=0
最小值=0
最大值=100
while[$ COUNT-le 5];做
Read -p '请输入1-10个整数:' int
如果[[!$ int=~ ^[0-9]$]];然后
Echo '输入必须是整数!'
1号出口
elif[[$ INT-gt 100]];然后
Echo '输入必须在100以内!'
1号出口
船方不负担装货费用
SUM=$(($SUM $INT))
[ $MIN -lt $INT ] MIN=$INT
[ $MAX -gt $INT ] MAX=$INT
让我们数数
完成的
echo 'SUM: $SUM '
echo 'MIN: $MIN '
echo 'MAX: $MAX '
用户猜测数字
#!/bin/bash
#脚本生成一个100以内的随机数,提示用户猜对数字,并根据用户的输入,提示用户猜对。
#猜小或猜大,直到用户猜对时脚本结束。# RANDOM是系统自带的系统变量,取值为0‐32767。
#使用余数算法将随机数更改为随机数1‐100 Num=$ [Random 01] echo' $ num '
#使用read提示用户猜测数字#使用if判断用户猜测的数字的大小:‐eq(等于)、‐ne(不等于)、‐gt(大于)、‐ge(大于等于)、# ‐lt(小于)、‐le(小于等于
If [$cai -eq $num]然后回显“恭喜,您猜到了”退出elif [$ CAI-GT $ NUM]然后回显“哎呀,猜到了”否则回显“哎呀,猜到了”fidone
监控Nginx对日志502的访问,并采取相应的行动。
假设服务器环境为lnmp,近期访问经常出现502现象,重启php-fpm服务后502错误消失,需要编写监控脚本。一旦502出现,php-fpm服务就会自动重启。
#场景:
#1.访问日志文件的路径:/data/log/access.log
#2.该脚本处于无限循环中,每10秒检测一次。10秒内的日志数是300。如果502的比例不低于10%(30),则需要重启php-fpm服务。
#3.重启命令是:/etc/init.d/php-fpm restart
#!/bin/bash
###########################################################
#监控Nginx对日志502的访问,并采取相应的措施。
###########################################################
log=/data/log/access.log
N=30 #设定阈值
同时:
做
#查看最近300次访问日志,统计502次。
err=` tail-n 300 $ log | grep-c ' 502 ' ' ` 0
如果[ $err -ge $N ]
然后
/etc/init . d/PHP-fpm restart 2/dev/null
#设置60s延迟,防止脚本bug导致php-fpm服务无限重启。
睡眠60
船方不负担装货费用
睡眠10
完成的
将结果分别赋给变量。
应用场景:我想把执行结果或者位置参数赋给变量,以备后续使用。
方法1:
for I in $(echo ' 4 5 6 ');做
eval a$i=$i
完成的
echo $a4 $a5 $a6
2.将位置参数192.168.1.1{1,2}拆分成各个变量。
num=0
对于I in $(eval echo $ *);Do #eval将{1,2}分解为1 2
设num=1
评估节点${num}='$i '
完成的
回显node 1node 2node 3
# bash a.sh 192.168.1.1{1,2}
192.168.1.11 192.168.1.12
方法三:
arr=(4 5 6)
INDEX1=$(echo ${arr[0]})
INDEX2=$(echo ${arr[1]})
INDEX3=$(echo ${arr[2]})
批量修改文件名
示例:
#触摸文章_{1.3}.超文本标记语言
# ls
文章_1.html文章_2.html文章_3.html
目的:把文章改为论坛
方法1:
对于$(ls *html)格式的文件;做
mv $file bbs_${file#*_}
# mv $file $(echo $file |sed -r 's/.*(_.*)/bbs\1/')
# mv $ file $(echo $ file | echo BBS _ $(cut-d _-F2)
完成的
方法2:
对于$(查找)中的文件. max depth 1-name ' * html ');做
mv $file bbs_${file#*_}
完成的
方法3:
#重命名文章论坛*。超文本标记语言
把一个文档前五行中包含字母的行删掉,同时删除6到10行包含的所有字母
1)准备测试文件,文件名为2.txt
第一行1234567不包含字母
第2行56789BBBBBB
第3行67890CCCCCCCC
第四行78asdfDDDDDDDDD
第5行123456EEEEEEEE
第6行1234567ASDF
第七行56789ASDF
第8行67890ASDF
第9行78asdfADSF
第10行123456AAAA
第11行67890ASDF
第12行78asdfADSF
第13行123456AAAA
2)脚本如下:
#!/bin/bash
##############################################################
#把一个文档前五行中包含字母的行删掉,同时删除6到10行包含的所有字母
##############################################################
sed -n '1,5'p 2.txt |sed '/[a-zA-Z]/'d
sed -n '6,10'p 2.txt |sed s'/[a-zA-Z]//'g
sed -n '11,$'p 2.txt
#最终结果只是在屏幕上打印结果,如果想直接更改文件,可将输出结果写入临时文件中,再替换2.txt或者使用[构成来自拉丁语、结尾为-我们的名词的复数]选项
统计当前目录中以。超文本标记语言结尾的文件总大
方法1:
#寻找。-姓名' *。'' html '-exec du-k { } \;| awk"{ sum=$ 1 } END { print sum } "
方法2:
对于以$(ls -l *为单位的尺寸. html | awk“{ print $ 5 }”;做
sum=$(($sum $size))
完成的
echo $sum
扫描主机端口状态
#!/bin/bash
主机=$1
PORT='22 25 80 8080 '
对于$端口中的端口;做
if echo/dev/null/dev/TCP/$ HOST/$ PORT;然后
回显"$端口打开"
其他
回显$端口关闭'
船方不负担装货费用
完成的
用壳打印示例语句中字母数小于6的单词
#示例语句:
#Bash还解释了许多多字符选项。
#!/bin/bash
##############################################################
#外壳打印示例语句中字母数小于6的单词
##############################################################
尝试中的对于s还解释了许多多字符选项。
做
' echo $ s | WC-c '
if [ $n -lt 6 ]
然后
回显$s
船方不负担装货费用
完成的
输入数字运行相应命令
#!/bin/bash
##############################################################
#输入数字运行相应命令
##############################################################
回声' *cmd菜单* 1-日期2-ls 3-谁4-pwd 0-退出'
同时:
做
#捕获用户键入值
请输入数字:' n
n1=' echo $ n | sed s '/[0-9]//' g '
#空输入检测
if [ -z '$n' ]
然后
继续
船方不负担装货费用
#非数字输入检测
if [ -n '$n1' ]
然后
出口0
船方不负担装货费用
破裂
完成的
案例$n英寸
1)
日期
;
2)
限位开关(限位开关)
;
3)
谁
;
4)
显示当前工作目录
;
0)
破裂
;
#输入数字非1-4的提示
*)
回声请输入数字为[1-4]'
环境系统应用中心环境系统应用程序中心
预期实现嘘免交互执行命令
预期是一个自动交互式应用程序的工具,如远程登录,ftp,密码等。
需先安装预期软件包。
方法1:EOF标准输出作为预期标准输入
#!/bin/bash
用户=根
PASS=123.com
IP=192.168.1.120
期望文件结束
设置超时30
衍生ssh $用户@$IP
期望{
(是/否)' {发送'是\ r ';exp_continue}
密码:' {发送$PASS\r'}
}
期望$ USER @ * ' { send ' $ 1 \ r ' }
期望$ USER @ * ' { send ' exit \ r ' }
期望电渗流
文件结束
方法2:
#!/bin/bash
用户=根
PASS=123.com
IP=192.168.1.120
expect -c '
衍生ssh $用户@$IP
期望{
(是/否)' {发送'是\ r ';exp_continue}
密码:" { send " $ PASS \ rexp_continue}
$ USER @ * ' { send ' df-h \ r exit \ r ';exp_continue}
}'
方法3:将预期脚本独立出来
登录脚本:
# cat login.exp
#!/usr/bin/expect
设置ip [lindex $argv 0]
设置用户[lindex $argv 1]
设置密码[lindex $argv 2]
设置lindex $argv 3
if { $argc!=4 } {
puts "用法:expect login.exp ip用户密码"
一号出口
}
设置超时30
衍生ssh $用户@$ip
期望{
(是/否)' {发送'是\ r ';exp_continue}
密码:' {发送' $passwd\r'}
}
期望' $user@*' {send '$cmd\r'}
期望' $user@*' {send 'exit\r'}
期望eof
执行命令脚本:写一个循环来批量操作多个服务器。
#!/bin/bash
主机信息=用户信息
对于IP in $(awk“{ print $ 1 }”$ HOST _ INFO)
做
user=$(awk-v I=' $ IP ' ' I==$ 1 { print $ 2 } ' $ HOST _ INFO)
pass=$(awk-v I=' $ IP ' ' I==$ 1 { print $ 3 } ' $ HOST _ INFO)
期望login.exp $ip $user $pass $1
完成的
Linux主机SSH连接信息:
# cat user_info.txt
192.168.1.120根123456
创建10个用户,并分别设置密码。密码需要10位数字,包含大小写字母和数字。最后,每个用户的密码需要存储在指定的文件中。
#!/bin/bash
##############################################################
#创建10个用户,并分别设置他们的密码。密码需要10位数字,包含大小写字母和数字。
#最后,每个用户的密码需要存储在指定的文件中。
#先决条件:安装mkpasswd命令
##############################################################
#生成10个用户的序列(00-09)
在“seq -w 0 09”中为u
做
#创建用户
useradd用户_$u
#生成密码
p=`mkpasswd -s 0 -l 10 '
#从标准输入中读取密码以修改它(不安全)
echo $p|passwd - stdin用户_$u
#常规密码修改
echo -e '$p\n$p'|passwd user_$u
#在日志文件中记录创建的用户和相应的密码。
echo ' user _ $ u $ p '/tmp/user password
完成的
监控httpd进程的数量,并根据监控情况做出相应的处理。
#!/bin/bash
###############################################################################################################################
#需求:
#1.每隔10秒钟监视httpd进程的数量。如果进程数大于等于500,则自动重启Apache服务,并检测服务重启是否成功。
#2.如果不成功,就需要重启。如果重启5次仍不成功,会向管理员发送报警邮件,退出检测。
#3.如果启动成功,等待1分钟并再次检查httpd进程的数量。如果进程数正常,将恢复正常检测(每10s一次)。否则,放弃重启并向管理员发送报警邮件,退出检测。
###############################################################################################################################
#计数器功能
检查服务()
{
j=0
对于“序列1 5”中的I
做
#重新启动Apache的命令
/usr/local/Apache 2/bin/Apache CTL restart 2/var/log/httpderr . log
#确定服务重启是否成功。
如果[ $?-eq 0 ]
然后
破裂
其他
j=$[$j 1]
船方不负担装货费用
#确定服务是否已尝试重新启动5次。
if [ $j -eq 5 ]
然后
mail.py
出口
船方不负担装货费用
完成的
}
同时:
做
n=`pgrep -l httpd|wc -l '
#确定httpd服务进程的数量是否超过500
如果[ $n -gt 500 ]
然后
/usr/local/Apache 2/bin/Apache CTL重新启动
如果[ $?-ne 0 ]
然后
检查_服务
其他
睡眠60
n2=`pgrep -l httpd|wc -l '
#确定重启后是否仍超过500。
如果[ $n2 -gt 500 ]
然后
mail.py
出口
船方不负担装货费用
船方不负担装货费用
船方不负担装货费用
#每10秒检查一次。
睡眠10
完成的
修改批处理服务器用户密码
Linux主机SSH连接信息:旧密码
# cat old_pass.txt
192 168 18 217根123456 22
192 168 18 218根123456 22
格式:IP用户密码端口
SSH密码修改脚本:新密码是随机生成的。
https://www.linuxprobe.com/books
#!/bin/bash
旧信息=旧通行证
新信息=新通行证
对于IP in $(awk '/^[^#]/{print $ 1 } ' $ old _ info);做
USER=$(awk-v I=$ IP ' I==$ 1 { print $ 2 } ' $ OLD _ INFO)
PASS=$(awk-v I=$ IP ' I==$ 1 { print $ 3 } ' $ OLD _ INFO)
PORT=$(awk-v I=$ IP ' I==$ 1 { print $ 4 } ' $ OLD _ INFO)
NEW_PASS=$(mkpasswd -l 8) #随机密码
echo ' $ IP $用户$新通行证$端口' $新信息
expect -c '
衍生ssh -p$PORT $USER@$IP
设置超时2
期望{
(是/否)' {发送'是\ r ';exp_continue}
密码:“{ send”$ PASS \ r”;exp_continue}
$ USER @ * ' { send ' echo \ ' $ NEW _ PASS \ ' | passwd-stdin $ USER \ r exit \ r ';exp_continue}
}'
完成的
生成新的密码文件:
# cat new_pass.txt
192.168.18.217根n8wX3mU% 22
192.168.18.218根c87锌镍22
iptables自动屏蔽访问网站频繁的互联网协议(互联网协议)
场景:恶意访问,安全防范
1)屏蔽每分钟访问超过200的互联网协议(互联网协议)
方法1:根据访问日志(Nginx为例)
#!/bin/bash
日期=$(日期%d/%b/%Y:%H:%M)
变态_ IP=$(tail-n 5000访问。log | grep $ DATE | awk ' { a[$ 1]} END { for(I in a)if(a[I]100)print I } ')
#先尾巴防止文件过大,读取慢,数字可调整每分钟最大的访问量100 .awk不能直接过滤日志,因为包含特殊字符。
对于$变态_IP中的IP;做
if[$(iptables-vnL | grep-c ' $ IP ')-eq 0];然后
iptables -I输入-s $IP -j DROP
船方不负担装货费用
完成的
方法2:通过传输控制协议(传输控制协议)建立的连接
#!/bin/bash
变态_ IP=$(netstat-an | awk ' $ 4 ~/:80 $/$ 6 ~/ESTABLISHED/{ gsub(/:[0-9]/,'',$ 5);{ a[$ 5]} } END { for(I in a)if(a[I]100)print I } ')
#gsub是将第五列(客户端IP)的冒号和端口去掉
对于$变态_IP中的IP;做
if[$(iptables-vnL | grep-c ' $ IP ')-eq 0];然后
iptables -I输入-s $IP -j DROP
船方不负担装货费用
完成的
2)屏蔽每分钟嘘尝试登录超过10次的互联网协议(互联网协议)
方法1:通过lastb获取登录状态:
#!/bin/bash
日期=$(日期%a %b %e %H:%M') #星期月天时分%e单数字时显示7,而%d显示07
变态_ IP=$(lastb | grep ' $ DATE ' | awk ' { a[$ 3]} END { for(I in a)if(a[I]10)print I } ')
对于$变态_IP中的IP;做
if[$(iptables-vnL | grep-c ' $ IP ')-eq 0];然后
iptables -I输入-s $IP -j DROP
船方不负担装货费用
完成的
方法2:通过日志获取登录状态
#!/bin/bash
日期=$(日期" %b %d %H ")
变态_ IP=' $(tail-n 10000/var/log/auth。log | grep ' $ DATE ' | awk '/Failed/{ a[$(NF-3)]} END { for(I in a)if(a[I]5)print I } ')
对于$变态_IP中的IP;做
if[$(iptables-vnL | grep-c ' $ IP ')-eq 0];然后
iptables-输入-s $IP -j DROP
echo ' $(date ' % F % T ')-iptables-A INPUT-s $ IP-j DROP ' ~/ssh-log in-limit。原木
船方不负担装货费用
完成的
根据网访问日志,封禁请求量异常的IP,如互联网协议(互联网协议)在半小时后恢复正常,则解除封禁
#!/bin/bash
####################################################################################
#根据网访问日志,封禁请求量异常的IP,如互联网协议(互联网协议)在半小时后恢复正常,则解除封禁
####################################################################################
logfile=/data/log/access.log
#显示一分钟前的小时和分钟
d1=`日期-日期'-1分钟%H%M
d2=`日期%M
ipt=/sbin/iptables
ips=/tmp/ips.txt
块()
{
#将一分钟前的日志全部过滤出来并提取互联网协议(互联网协议)以及统计访问次数
grep ' $ D1:' $日志文件| awk ' { print $ 1 } ' | sort-n | uniq-c | sort-n $ IPS
#利用为循环将次数超过100的互联网协议(互联网协议)依次遍历出来并予以封禁
对于我在“awk”1100美元{ print $ 2 }“IPS”
做
$ipt -I输入-p TCP-d端口80多岁的牙买加人拒绝
echo ' date % F-% t ` $ I '/tmp/badip。原木
完成的
}
取消阻止()
{
#将封禁后所产生的pkts数量小于10的互联网协议(互联网协议)依次遍历予以解封
对于` $ ipt-nvL INPUT-line-numbers | grep ' 0。0 .0 .0/0 ' | awk ' $ 210 { print $ 1 } ' | sort-NR '中的a
做
$ipt -D输入一美元
完成的
$ipt -Z
}
#当时间在00分以及30分时执行解封函数
if [ $d2 -eq '00' ] || [ $d2 -eq '30' ]
然后
#要先解再封,因为刚刚封禁时产生的pkts数量很少
疏通
街区
其他
街区
船方不负担装货费用
判断用户输入的是否为互联网协议(互联网协议)地址
方法1:
#!/bin/bash
函数check_ip(){
IP=$1
VALID _ CHECK=$(echo $ IP | awk-f . ' $ 1=255 $ 2=255 $ 3=255 $ 4=255 { print ' yes ' } ')
if echo $IP|grep -E '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3 } $ '/dev/null;然后
if[$ VALID _ CHECK==' yes '];然后
回声可用的$IP '
其他
回显" $IP不可用!"
船方不负担装货费用
其他
回声格式错误!'
船方不负担装货费用
}
检查_ip 192.168.1.1
检查_ip 256.1.1.1
方法2:
#!/bin/bash
函数check_ip(){
IP=$1
如果[[ $IP=~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]];然后
FIELD1=$(echo $IP|cut -d. -f1)
FIELD2=$(echo $IP|cut -d. -f2)
FIELD3=$(echo $IP|cut -d. -f3)
FIELD4=$(echo $IP|cut -d. -f4)
if[$ field 1-le 255-a $ field 2-le 255-a $ field 3-le 255-a $ field 4-le 255];然后
回声可用的$IP '
其他
回显" $IP不可用!"
船方不负担装货费用
其他
回声格式错误!'
船方不负担装货费用
}
检查_ip 192.168.1.1
检查_ip 256.1.1.1
增加版:
加个死循环,如果互联网协议(互联网协议)可用就退出,不可用提示继续输入,并使用awk判断。
#!/bin/bash
函数check_ip(){
本地IP=$1
VALID _ CHECK=$(echo $ IP | awk-f . ' $ 1=255 $ 2=255 $ 3=255 $ 4=255 { print ' yes ' } ')
if echo $IP|grep -E '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3 } $ '/dev/null;然后
if[$ VALID _ CHECK==' yes '];然后
返回0
其他
回显" $IP不可用!"
返回一
船方不负担装货费用
其他
“回声”格式错误!请重新输入。
返回一
船方不负担装货费用
}
虽然真实;做
请输入IP: ' IP
check_ip $IP
[ $?-eq 0 ] break || continue
完成的
到此这篇关于非常实用的23个壳脚本实例的文章就介绍到这了,更多相关壳脚本实例内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。