shell实例100例《七》

61、题目要求  :  找文件差异

有两个文件a.txt中和b.txt,需求是,把A.TXT中有的但b.txt中没有的行找出来,并写入到c.txt,然后计算c.txt文件的行数。

【核心要点】

可以使用while循环遍历a.txt,逐行进行匹配,如果这一行在b.txt中没有,就直接重定向到c.txt即可

参考答案

#!/bin/bash
#这个脚本用来比较文件差异
#作者:猿课-阿铭 www.apelearn.com
#日期:2018-12-07

cat a.txt|while read line
do
    if ! grep -q "$line" b.txt
    then
	echo $line
    fi
done >c.txt
wc -l c.txt

实例 :

编写a.txt 和b.txt文档,用于测试

6d9e1c7fccb07f7aec0e88aaa835802c3c2.jpg

ecb761247dcd9a157dffecfba72ba0eec66.jpg

比较b.txt文档,使用 -f命令,把匹配到的关键词root用红色显示出来。 

c058bbc38acb729a8ad04067ab05610d53c.jpg

找出a.txt 和b.txt文档共同存在的关键词

df67b7cd657716d978ebe4c93de29a98214.jpg

找出a.txt 有,b.txt中文档不存在的关键词

4be4871fd73f0b73a7b514fca9f80658ab8.jpg

把a.txt 和b.txt文档不同的关键词,显示出来。

bdd030aca4eb7c540af255016df9827e93c.jpg

7e5f54eb4e83b964c8a641c3043c2856be1.jpg

执行脚本,查看运行的结果。3表示有3行不同的。

f71b4bcb931844de09191f62005005c5d50.jpg

注意  : 

if ! grep -q "$line" b.txt                   #b.txt文档中的没有的,

done >c.txt                                 #把a.txt 和b.txt文档不同的关键词写入到c.txt文档中
wc -l c.txt                               #统计一下,c.txt 中的行数

 

62、题目要求     :   杀进程

把当前用户下所有进程名字中含有 “阿明” 的进程关闭。

【核心要点】

ps -u $USER

参考答案
#!/bin/bash
#这个脚本用来杀进程
#作者:猿课-阿铭 www.apelearn.com
#日期:2018-12-07

ps -u $USER|awk '$NF ~ /aming/ {print $1}' |xargs kill

实例 :

查看当前的用户

9e4e716f3f7859648cd1d51ed2dfee3e8d9.jpg

查看指定的用户

e542d6709506252d3097e170486378679fd.jpg

查看当前用户下的进程数

d5b8a998aca9d949a45efef820b427e4ecd.jpg

查看当前用户下的进程数,最后一行匹配“aming”的用户

64b032bcbc3ced853cd7e858adfcebf3a29.jpg

查看出kworke用户的行;并打印出第一行;查找aming用户,并打印出第一行,杀死aming用户。

965bfca4f0c144679fa43e938648697146b.jpg

执行脚本,查看运行的结果。

812531a14c66db50b85131f08918685c2e7.jpg

注意  : 

ps -u $USER|awk '$NF ~ /aming/ {print $1}' |xargs kill

 

63、题目要求   :  并发备份数据库

用外壳实现,以并发进程的形式将MySQL的数据库所有的表备份到当前目录,并把所有的表压缩到一个压缩包文件里。

假设数据库名字为MYDB,用户名为阿明,密码为passwd文件。

【核心要点】

1、在shell中加上&可以将命令丢到后台,从而可以同时执行多条命令达到并发的效果

2、如果表数量很大,全部都丢到后台去,服务资源恐怕支持不了,所以需要控制并发数。

3、备份表的命令是mysqldump -uaming -ppasswd mydb tbname > tbname.sql

参考答案
#!/bin/bash
#这个脚本用来并发备份数据库
#作者:猿课-阿铭 www.apelearn.com
#日期:2018-12-07

N=5
mysql -uaming -ppasswd mydb -e "show tables"|sed '1d' > /tmp/table.txt
n=`wc -l /tmp/table.txt|awk '{print $1}'

div()
{
    n=`echo "scale=1;$1/$2"|bc`
    n1=`echo "scale=1;$n+0.5"|bc`
    echo $n1|cut -d. -f1
}

n1=`div $n $N`

split -l $n1 /tmp/table.txt 

myd()
{
    for t in `cat $1`
    do
    	mysqldump -uaming -ppasswd mydb $t > $t.sql
    done
}

for f in xaa xab xac xad xae
do
    myd $f &
done

wait 
tar czf mydb.tar.gz *.sql
rm -f *.sql 

实例 :

把test.txt文档分为4份,使用split命令,分割,ls查看分割结果;为何只有三个结果,因为是四舍五入的,x开头的文件指的是并发数。

1803a30a0662cf99cd94e6ce0ca39f64d63.jpg

split命令可以指定分割之后,生成的文件名test

e5b180f12cd5f48c1a26b48827975fe1697.jpg

 

 

注意  : 

$1                        #是文件名

N=5                                 #N=5表示并发分为5份

mysql -uaming -ppasswd mydb -e "show tables"|sed '1d' > /tmp/table.txt n=`wc -l /tmp/table.txt|awk '{print $1}'                            #mydb数据库显示所有的列表,删除第一行,表的列表写入/tmp/table.txt 文件中

`wc -l /tmp/table.txt|awk '{print $1}'                #计算文件的行数,并打印出来第一行

for f in xaa xab xac xad xae                         #表示并发产生的5个表

myd $f &                              #&表示把进程丢到后台去

 

mysqldump -uaming -ppasswd mydb $t > $t.sql                     #备份数据库,$t是表名,写入到当前目录的数据库$t.sql 

n1=`div $n $N`                             #$n除以$N ; $n是除数 $N是被除数

 

求一个平均值

n=`echo "scale=1;$1/$2"|bc`                         #

n1=`echo "scale=1;$n+0.5"|bc`                   #

echo $n1|cut -d. -f1                        #

 

tar czf mydb.tar.gz *.sql                                  #把所有的数据库打包成压缩包

split -l $n1 /tmp/table.txt                                         #把/tmp/table.txt 文件分为$n1份;-l意思是指要切割的行数

 

 

64、题目要求     : 监控CDN节点

一个网站,使用了cdn,全国各地有几十个节点。需要你写一个shell脚本来监控各个节点是否正常。假如

  1. 监控的网址为www.aming.com/index.php
  2. 源站IP为88.88.88.88。

【核心要点】

1、某个节点正常,那访问到的内容应该和源

2、比较两个文件内容是否有差异的命令为diff,如,diff 1.txt 2.txt如果结果为空,说明两个文件不存在差异

3、几十个节点,需要把所有节点的IP全部拿到,然后对所有IP进行遍历

参考答案
#!/bin/bash
#这个脚本用来监控CDN节点
#作者:猿课-阿铭 www.apelearn.com
#日期:2018-12-08

s_ip=88.88.88.88
url=www.aminglinux.com/index.php
ipf=/data/ip.list

curl -x$s_ip:80 $url 2>/dev/null >/tmp/source.txt
for ip in `cat $ipf`
do
    curl -x$ip:80 $url 2>/dev/null >/tmp/$ip.txt
    diff /tmp/source.txt /tmp/$ip.txt > /tmp/$ip.diff

    n=`wc -l /tmp/$ip.diff|awk '{print $1}'`
    if [ $n -gt 0 ]
    then
	echo "节点$ip有异常."
    fi
done

实例 :

把index.php页面,重定向到/tmp/tmp.txt文件中去

5fe6c252b9829df6fb29d9e4fe5491ab7ee.jpg

直接写入到/tmp/tmp.txt文件中去,不显示过程结果。

d26c76b53cc995691abd336636d92472cf5.jpg

 

注意  : 

curl -x$s_ip:80 $url 2>/dev/null >/tmp/source.txt                  #访问节点IP,并把访问的结果写入到/tmp/source.txt ,不显示重定向过程; -x指定IP

for ip in `cat $ipf`                          #将IP写入到$ipf

 

diff /tmp/source.txt /tmp/$ip.txt > /tmp/$ip.diff                    #/tmp/source.txt比对/tmp/$ip.txt 这两个文件的差异,如果有,说明出问题了,并将结果写入到/tmp/$ip.diff

wc -l /tmp/$ip.diff|awk '{print $1}'                        #将比对出来的结果,统计一下行数,只显示一行。

 

if [ $n -gt 0 ]                         #如果gt的结果是0,说明出问题了

 

65、题目要求  :    破解字符串

已知下面的字符串是通过RANDOM随机数变量md5sum | cut -c 1-8截取后的结果,请破解这些字符串对应的md5sum前的RANDOM对应数字?21029299

00205d1c

a3da1677

1f6d12dd

890684ba

【核心要点】

$RAMDOM的范围为0-32767,要想借此题,需要遍历0-32767所有数字,逐一和题目中给出的字符串匹配

参考答案
#!/bin/bash
#这个脚本用来破解字符串
#作者:猿课-阿铭 www.apelearn.com
#日期:2018-12-08

for i in `seq 0 32767`
do
    m=`echo $i|md5sum |cut -c 1-8 `
    echo $i $m 
done > /tmp/md5.txt

cat > c.txt <<EOF
21029299
00205d1c
a3da1677
1f6d12dd
890684ba
EOF

grep -f c.txt /tmp/md5.txt

实例 :

求12345的md5sum的值,并截取前1-8的数字

f5e55424c1309d937a6d2b386be0016c960.jpg

 

执行脚本,查看结果,因为要计算3万多数字,所以需要很长时间等待脚本的执行结果。

8a23a76030fcbd27d831894e25b81fd20ce.jpg

注意  :

for i in `seq 0 32767`                            #求出0-32767之间的md5sum的值 

m=`echo $i|md5sum |cut -c 1-8 `                 #  求$i的md5sum的值,并截取前1-8的数字  

grep -f c.txt /tmp/md5.txt                    # 

cat > c.txt <<EOF                                    #将所有的数字写入到c.txt文档中

 

66、题目要求   :    判断cpu厂商

写一个脚本:

  1. 判断当前主机的CPU生产商,其信息在/ proc / cpuinfo文件中供应商id一行中。
  2. 如果其生产商为AuthenticAMD,就显示其为AMD公司;
  3. 如果其生产商为GenuineIntel,就显示其为英特尔公司;
  4. 否则,就说其为非主流公司。

【核心要点】

1、截取/proc/cpuinfo文档包含“vendor_id”那行的文本

参考答案
#!/bin/bash
#这个脚本用来判断CPU厂商
#作者:猿课-阿铭 www.apelearn.com
#日期:2018-12-10

cpu=`grep '^vendor_id' /proc/cpuinfo |head -1|awk -F ': ' '{print $2}'`
#if [ $cpu == "AuthenticAMD" ]
#then
#   echo "CPU厂商是AMD."
#elif [ $cpu == "GenuineIntel" ]
#then
#   echo "CPU厂商是Intel."
#else
#   echo "CPU厂商是非主流厂商。"
#fi

case $cpu in
  AuthenticAMD)
	echo "CPU厂商是AMD."
  ;;

  GenuineIntel)
	echo "CPU厂商是Intel."
  ;;
  
  *)
	echo "CPU厂商是非主流厂商。"
  ;;
esac

实例 :

查看cpu厂商的命令 : cat /proc/cpuinfo , 显示其为英特尔公司;

c257edecfb9fbbb3f5886aecf877ffe620c.jpg

截取含有“vendor_id”的行,在/proc/cpuinfo中,head -1只显示第一行

1459f53e8b8fd389107e1442809e24243cb.jpg

因为厂商名字在第二行,所以用{print $2},只截取厂商的名字,

a4e691aa3282584e5865eded95f354f7a63.jpg

注意         : ntpdate命令联网同步时间,原因 : linux长期不登录,时间可能和windows系统不同步。

9294a0a8f51683e813d8334e508f9eda5a5.jpg

执行脚本,查看结果

e212e0e41a37a4b10c1015bb4d781397384.jpg

注意  : 

cpu=`grep '^vendor_id' /proc/cpuinfo |head -1|awk -F ': ' '{print $2}'`               #查找含有vendor_id ,在/proc/cpuinfo中查看,只显示第一行,把含有厂商的第二行打印处理,

elif [ $cpu == "GenuineIntel" ]                         #如果是CPU是GenuineIntel

 

67、题目要求   :   监控CPU使用率

用壳写一个监控服务器CPU使用率的监控脚本。

【核心要点】

思路 : 用top -bn1 命令,取当前空闲cpu百分比值(只取整数部分),然后用100去减这个数值

参考答案
#!/bin/bash
#这个脚本用来计算CPU使用率
#作者:猿课-阿铭 www.apelearn.com
#日期:2018-12-10

mail_user=xxx@xxx.com

m_mail() {
    log=$1
    t_s=`date +%s`
    t_s2=`date -d "1 hours ago" +%s`
    if [ ! -f /tmp/$log ]
    then
        #创建$log文件
        touch /tmp/$log 
        #增加a权限,只允许追加内容,不允许更改或删除
        chattr +a /tmp/$log
        #第一次告警,可以直接写入1小时以前的时间戳
        echo $t_s2 >> /tmp/$log
    fi
    #无论$log文件是否是刚刚创建,都需要查看最后一行的时间戳
    t_s2=`tail -1 /tmp/$log|awk '{print $1}'`
    #取出最后一行即上次告警的时间戳后,立即写入当前的时间戳
    echo $t_s>>/tmp/$log
    #取两次时间戳差值
    v=$[$t_s-$t_s2]
    #如果差值超过1800,立即发邮件
    if [ $v -gt 1800 ]
    then
        #发邮件,其中$2为mail函数的第二个参数,这里为一个文件
        python mail.py $mail_user "CPU使用率超过90%" "`top -bn1`"  2>/dev/null   
        #定义计数器临时文件,并写入0         
        echo "0" > /tmp/$log.count
    else
        #如果计数器临时文件不存在,需要创建并写入0
        if [ ! -f /tmp/$log.count ]
        then
            echo "0" > /tmp/$log.count
        fi
        nu=`cat /tmp/$log.count`
        #30分钟内每发生1次告警,计数器加1
        nu2=$[$nu+1]
        echo $nu2>/tmp/$log.count
        #当告警次数超过30次,需要再次发邮件
        if [ $nu2 -gt 30 ]
        then
             python mail.py $mail_user "CPU使用率超过90%持续30分钟了" "`top -bn1`" 2>/dev/null  
             #第二次告警后,将计数器再次从0开始          
             echo "0" > /tmp/$log.count
        fi
    fi
}

while :
do
    cpu_i=`top -bn1 |grep 'Cpu(s):'|sed 's/^%//'|awk -F ' +|%' '{print $8}'`
    cpu_u=`echo 100-$cpu_i|bc`

    if [ $cpu_u -gt 90 ]
    then
       m_mail cpu
    fi
    sleep 60
done

实例 :

使用top命令查看你,第三行就是cpu使用率;us是用户态的服务CPU使用率,sy是系统态的CPU使用率。平常的使用率是指us和sy的使用率。使用率等于100-id(99.3)

0a765a4e4dc83f8dfa0f8a3b0bc4b3c67fd.jpgcentos 7静态显示CPU使用率,显示使用率是100-99.2。centOS 6的id后面有百分号%

1658d1e1d63e7d8a1a465c1b2853625d5e3.jpg

5dcf2e749740f09635ad8f9dad84c04192c.jpg

只显示出来,含有CPU的行。按空格做分隔符,含有CPU的在第五行

648af8b45de6e58a96f2fd399c2a9d2b39b.jpg

5bf57371ebfde7169f805710ab5ccca46cb.jpg

用百分号%做分隔符,含有CPU的在第八行用空格加,表示一个或者多个空格

6cb8fd20e7df8e16c1bb9678a916609e58a.jpg

1a5cf09b44b51d88f8f243a9e0a550a09a9.jpg

sed清空第一个%,然后在centos 7 执行这个命令。

af94ec0da83f8294632a858ba10ecd978b7.jpg

执行脚本,查看结果。

 

只查看CPU的使用率的脚本

e52f944607ea5e2124dd5febc6a3be4401a.jpg

注意  :

t_s=`date +%s`                       #

t_s2=`date -d "1 hours ago" +%s`                      #

if [ $cpu_u -gt 90 ]                                #当使用率大于90时,每隔1分钟发一封邮件

 

 

68、题目要求   :    打印子进程

给出一个进程PID,打印出该进程下面的子进程以及子进程下面的所有子进程。(只需要考虑子进程的子进程,再往深层次则不考虑)

【核心要点】

ps -elf结果中PPID那一列为父进程PID

参考答案
#!/bin/bash
#这个脚本用来打印子进程
#作者:猿课-阿铭 www.apelearn.com
#日期:2018-12-10

ps -elf > /tmp/pid.txt
read -p "Please input a pid: " p

if [ -z "$p" ]
then
    echo "你没有输入任何pid,请输入一个pid."
    exit
fi

if ! grep -qw "$p" /tmp/pid.txt
then
    echo "你输入的pid不存在."
    exit
fi

get_cpid()
{
    p1=$1
    ps -elf |awk -v p2=$p1 '$5==p2 {print $4}' > /tmp/$p1.txt
    n=`wc -l /tmp/$p1.txt|awk '{print $1}'`
    if [ $n -eq 0 ]
    then
	echo "进程$1下没有子进程."
    else
	echo "进程$1下的子进程是:"
	cat /tmp/$p1.txt
    fi
}

get_cpid $p

for c_p in `cat /tmp/$p.txt`
do 
    get_cpid $c_p
done

实例 :

查看进程的pid,ppid是父进程

57fcc3e3501447c180a4b7688eb30f64aec.jpg

一用进程树的方式显示进程

7c2a9423683e7681977350806c4506a482b.jpg

只显示ppid的进程数字

4a44b47146bbe1856d18a0d9f1b62a9e462.jpg

查看进程ppid对应的pid子进程数字

4bfbe5f521b6073c1809837451fbdf1f0ae.jpg

执行脚本,查看结果

bdcbf426360b79ef79e9f5878cd1a973f5b.jpg

a0abe2f3c73e73b30dce082582bff6b97aa.jpg

注意  : 

ps -elf > /tmp/pid.txt                               # 把进程的pid写入到/tmp/pid.txt 

if [ -z "$p" ]                             #输入的变量为空

if ! grep -qw "$p" /tmp/pid.txt                             #如果/tmp/pid.txt 中不包含输入的pid,就提醒“你输入的pid不存在.”

wc -l /tmp/$p1.txt|awk '{print $1}'                              #统计行数,并只打印出显示出来的第一行。

 

69、题目要求   :  给lamp环境增加项目

需求背景:服务器上,跑的灯环境,上面有很多客户的项目,每个项目就是一个网站。由于客户在不断增加,每次增加一个客户,就需要配置相应的mysql,ftp以及httpd。这种工作重复性非常强的,所以用脚本实现非常合适.mysql增加的是对应客户项目的数据库,用户,密码,FTP增加的是对应项目的用户,密码(使用vsftpd的,虚拟用户模式),httpd的就是要增加虚拟主机配置段。

【核心要点】

要想解此题,首先要搞清楚MySQL库和用户,增加httpd虚拟主机、增加FTP用户的命令,只要能在命令行搞定,那么在脚本中就没问题。

参考答案
#!/bin/bash
#本脚本的功能是在LAMP环境中增加站点,包括apache配置、FTP增加用户、MySQL增加库和用户
#作者:猿课-阿铭 www.apelearn.com
#日期:2018-12-10

#网站目录
webdir=/data/wwwroot

#ftp的虚拟用户配置文件目录
ftpudir=/etc/vsftpd/vuuser

#ftp虚拟用户密码文件
ftpuserfile=/root/login

#mysql命令行登录root
mysqlc="/usr/local/mysql/bin/mysql -uroot -pjk1hYUcnt6"

#apache虚拟主机配置文件
httpd_config_f="/usr/local/apache2/conf/extra/httpd-vhosts.conf"

#定义增加MySQL库和用户的函数
add_mysql_user()
{
    #生成随机密码
    mysql_p=`mkpasswd -s 0 -l 12`

    #将密码保存到临时文件里,这里的$pro为用户自定义的项目名字
    echo "$pro $mysql_p" >/tmp/$pro.txt

    #这里使用嵌入文档的形式(需顶格),将创建用户并授权的命令传递给mysql    
$mysqlc <<EOF
create database $pro;
grant all on $pro.* to "$pro"@'127.0.0.1' identified by "$mysql_p";
#下面这个EOF必须要顶格
EOF
}

#定义增加FTP用户的函数
add_ftp_user()
{
    ftp_p=`mkpasswd -s 0 -l 12`
    echo "$pro" >> $ftpuserfile
    echo "$ftp_p" >> $ftpuserfile

    #将用户、密码文件转换为密码db文件
    db_load -T -t hash -f $ftpuserfile  /etc/vsftpd/vsftpd_login.db
    cd $ftpudir

    #这里的aaa是一个文件,是之前的一个项目,可以作为配置模板
    cp aaa $pro 

    #把里面的aaa改为新的项目名字
    sed -i "s/aaa/$pro/" $pro 

    #重启vsftpd服务
    /etc/init.d/vsftpd restart
}

#定义增加apache虚拟主机的函数
config_httpd()
{
    #增加网站根目录,和域名保持一致,这里的$dom为用户自定义的域名
    mkdir $webdir/$dom

    #将网站根目录属主和属组设置为ftp用户
    chown vsftpd:vsftpd $webdir/$dom
    
    #用嵌入文档(需顶格),把虚拟主机配置写入到配置文件里
cat >> $httpd_config_f <<EOF
<VirtualHost *:80>
    DocumentRoot $webdir/$dom
    ServerName $dom
    <Directory $webdir/$dom>
        AllowOverride none
        Require all granted  
    </Directory>
</VirtualHost>
EOF
   
    #重载apache服务
    /usr/local/apache2/bin/apachectl graceful
}

read -p "input the project name: " pro
read -p "input the domain: " dom

add_mysql_user
add_ftp_user
config_httpd

实例 :

执行脚本,查看结果

注意  : 

$ftpuserfile                            #用户的密码文件

create database $pro;                        #创建数据库$pro

grant all on $pro.* to "$pro"@'127.0.0.1' identified by "$mysql_p";            #赋予数据库密码

 

70、题目要求 :    简易计算器

用shell写一个简易计算器,可以实现加,减,乘,除运算,假如脚本名字为1.sh,执行示例:./ 1.sh 1 + 2

【核心要点】

1、脚本有三个参数,所以第一要判断用户输入的参数个数是否符合要求。

2、第一个第三个参数是数字,可以是小数,但不能是负数,第二个参数只能是+、-、*、/、,如果是其他要报错。

参考答案
#!/bin/bash
#这个脚本用来实现简易计算器
#作者:猿课-阿铭 www.apelearn.com
#日期:2018-12-10

if [ $# -ne 3 ]
then
    echo "你给的参数个数不对,应该给3个参数."
    exit
fi

if_number()
{
    n1=`echo $1|sed 's/[0-9.]//g'`
    if [ -n "$n1" ]
    then
	echo "$1不是数字."
	exit
    fi

    if echo $1|grep -q '^\.' 
    then
	echo "数字$1不合法."
        exit
    fi
}

if_number $1
if_number $3

case $2 in 
  +)
    echo "$1+$3"|bc
    ;;
  -)
    echo "$1-$3"|bc
    ;;
  \*)
    echo "$1*$3"|bc
    ;;
  /)
    echo "scale=2;$1/$3"|bc
    ;;
  *)
    echo "你给出的格式不对,第二个参数只能是+,-,*,/"
    ;;
esac

实例 :

执行脚本,查看结果. 1除以3,保留两位数

f891be560ecb05730461c6c370ae9a4e750.jpg

注意  : 

if [ $# -ne 3 ]                                #$#不等于3,提示 “你给的参数个数不对,应该给3个参数.”

n1=`echo $1|sed 's/[0-9.]//g'`                        # 如果输入的数字不是数字,是空的   

if [ -n "$n1" ]                  #如果不为空,提示“$1不是数字.” 退出

 

if echo $1|grep -q '^\.'                         #如果有以点开头的,提示"数字$1不合法."

echo "$1+$3"|bc                     #$1+$3的值,比较大小

echo "scale=2;$1/$3"|bc                         #保留两位小数,$1除以$3

 

来源 :https://github.com/aminglinux/shell100/blob/master/13.md

转载于:https://my.oschina.net/u/3803405/blog/3001286

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值