《Linux操作系统与应用技术RHEL 8》(贺学剑)教案 第14课 shell简易编程(一)_第1页
《Linux操作系统与应用技术RHEL 8》(贺学剑)教案 第14课 shell简易编程(一)_第2页
《Linux操作系统与应用技术RHEL 8》(贺学剑)教案 第14课 shell简易编程(一)_第3页
《Linux操作系统与应用技术RHEL 8》(贺学剑)教案 第14课 shell简易编程(一)_第4页
《Linux操作系统与应用技术RHEL 8》(贺学剑)教案 第14课 shell简易编程(一)_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGE14PAGE14PAGE11PAGE11

课题shell简易编程(一)课时2课时(90min)教学目标知识技能目标:(1)熟悉创建和执行shell脚本的方法(2)了解常用的shell变量(3)掌握条件测试语句的使用方法(4)掌握shell脚本中条件判断语句的使用方法素质目标:(1)提高分析问题和解决问题的能力和自信心(2)遵守日常操作规范,养成良好的个人习惯教学重难点教学重点:创建和执行shell脚本的方法,常用的shell变量,条件测试语句的使用方法,shell脚本中条件判断语句的使用方法教学难点:掌握shell脚本中条件判断语句的使用方法教学方法案例分析法、问答法、讨论法、讲授法教学用具电脑、投影仪、多媒体课件、教材教学设计第1节课:→→→传授新知(18min)→课堂讨论(5min)→课堂实践(15min)第2节课:传授新知(15min)→课堂讨论(10min)→课堂实践(15min)→课堂小结(3min)→作业布置(2min)教学过程主要教学内容及步骤设计意图第一节课课前任务【教师】布置课前任务,和学生负责人取得联系,让其提醒同学通过文旌课堂APP或其他学习软件,预习本节课要讲的知识【学生】完成课前任务通过课前任务,使学生提前预习要学的知识,提高课堂教效果考勤

(2min)【教师】使用文旌课堂APP进行签到【学生】班干部报请假人员及原因培养学生的组织纪律性,掌握学生的出勤情况问题导入(5min)【教师】提出以下问题:什么是shell脚本?通过问题导入的方法,引导学生主动思考,激发学生的学习兴趣传授新知

(18min)【教师】通过学生的回答引入要讲的知识,介绍shell脚本基础知识,创建和执行shell脚本的方法,以及shell变量的相关知识一、shell脚本概述shell脚本(shellscript)是利用shell的功能编写的程序,该程序是纯文本文件,文件中的语句可以是shell命令,如echo、pwd和mkdir等,或者是正则表达式、重定向和管道等,也可以是类似高级程序设计语言中的各种流程控制语句,如if条件判断语句和for条件循环语句等,还可以是以“#”开头的注释语句,注释语句在执行过程中将被忽略。此外,用户可以在shell脚本中根据需要自定义变量或函数,以提高程序的复用性和可读性。由于shell脚本的类型有很多,为了使用户编写的脚本在各种类型的shell环境下都能执行,shell脚本中的第一行应为如下语句。#!/bin/bash其中,“#!”表示脚本声明,用于告诉系统执行shell脚本使用的命令行终端解释器。此处表示执行shell脚本使用的命令行终端解释器为bash。【知识库】可执行如下命令查看当前系统默认使用的命令行终端解释器。[root@localhost~]#echo$SHELL/bin/bash由以上执行结果可知,RHEL8默认使用的命令行终端解释器为bash。二、创建和执行shell脚本1.创建shell脚本✈【教师】提出以下问题,随机邀请学生进行回答Shell文件的后缀名是什么?✈【学生】聆听、思考、回答✈【教师】总结学生的回答通常使用文本编辑器Vim创建shell脚本,创建完成后就可以编写shell脚本了。shell脚本编写完成后,输入“:wq”并按“Enter”键即可保存文件并退出Vim。【实例7-1-1】在“scripts”目录下创建名为“example7-1.sh”的shell脚本,用于查看当前工作目录及该目录下所有文件的详细信息。[root@localhost~]#mkdir/scripts[root@localhost~]#cd/scripts[root@localhostscripts]#vimexample7-1.sh打开“example7-1.sh”文件按“i”键后输入以下内容,然后保存文件并退出Vim。#!/bin/bashpwdls–l【提示】shell脚本名可以是任意的,但为了与普通文件进行区分,建议添加“.sh”后缀,以表示是一个脚本文件。2.执行shell脚本执行shell脚本主要有以下两种方式。(1)使用bash命令执行shell脚本,其格式如下。bash脚本名这种方式无须将shell脚本的权限设置为可执行。该命令也可由“sh脚本名”命令代替。(2)直接输入shell脚本所在路径执行shell脚本,该路径可以是绝对路径,也可以是相对路径。例如,在“/home”目录下创建了一个名为“demo.sh”的shell脚本,则可以使用如下命令执行该脚本。#以绝对路径的方式执行shell脚本[root@localhost~]#/home/demo.sh#以相对路径的方式执行shell脚本[root@localhost~]#cd/home[root@localhosthome]#./demo.sh【提示】直接输入shell脚本所在路径执行shell脚本时,默认情况下会因为权限不足而提示错误信息,此时须将shell脚本的访问权限设置为可执行。【实例7-1-2】执行shell脚本“example7-1.sh”。(1)使用bash命令执行shell脚本。[root@localhostscripts]#bashexample7-1.sh/scripts总用量4-rw-r--r--.1rootroot2312月117:12example7-1.sh(2)直接输入shell脚本所在路径执行shell脚本。[root@localhostscripts]#./example7-1.shbash:./example7-1.sh:权限不够“example7-1.sh”文件默认不可执行,故提示“权限不够”。为“example7-1.sh”文件添加可执行权限后重新执行shell脚本,执行结果如下。[root@localhostscripts]#chmodu+xexample7-1.sh[root@localhostscripts]#./example7-1.sh/scripts总用量4-rwxr--r--.1rootroot2312月117:12example7-1.sh三、shell变量1.用户变量用户变量是指由用户自定义的普通变量。变量名由字母、数字、下画线组成,但是不能以数字开头,并且严格区分大小写,如dir与Dir是两个不同的变量名。为用户变量赋值的过程也是声明一个变量的过程,用户变量的赋值形式如下。变量名=字符串或数字为用户变量赋值后,要想修改变量值,只需重新赋值即可。要想声明一个只读变量,即赋值后不允许再修改,则可以在变量名前添加“readonly”关键词。要想访问变量值,可以在变量名前添加“$”符号。要想在屏幕上显示变量值,可以使用echo命令。【提示】在为用户变量赋值时,等号两边一定不能留空格。当需要将一个包含空格的字符串赋给用户变量时,应用双引号将该字符串括起来。✈【教师】讲解“学以修身”的内容(详见教材),引导学生在日常生活中也需要遵守有形的规则和无形的规矩,强化自我约束【实例7-1-3】为用户变量赋值并访问和显示变量值。[root@localhost~]#readonlynum=100[root@localhost~]#num=80bash:num:只读变量[root@localhost~]#lcount=0[root@localhost~]#echo$lcount0[root@localhost~]#name="lidong"[root@localhost~]#echo$namelidong2.位置变量✈【教师】通过多媒体展示“shell脚本中的参数”图片和例子(详见教材),帮助学生对这些内容有更直观地认识在Linux操作系统命令行终端执行shell脚本时,脚本名后面可添加多个参数。这些参数可使用位置变量来表示,其中,$1表示第1个参数、$2表示第2个参数,依次类推,$n表示第n个参数。3.内部变量✈【教师】提出以下问题,随机邀请学生进行回答在运行脚本进行参数传递的时候,多个参数之间怎么分隔?✈【学生】聆听、思考、回答✈【教师】总结学生的回答内部变量是Linux操作系统提供的一种特殊类型的变量,在shell脚本中,内部变量值是不能修改的。使用内部变量可以接收用户输入的参数,更好地满足用户的一些实时需求,从而更加灵活地完成任务。部分内部变量及其含义如下。(1)$#:参数的数量。(2)$?:命令执行后的返回值。(3)$0:shell脚本名。(4)$*:所有参数。【实例7-1-4】位置变量和内部变量的使用。[root@localhost~]#vimvariable.sh#!/bin/bashecho"当前脚本名称为$0"echo"总共有$#个参数,分别是$*。"echo"第1个参数为$1,第3个参数为$3,第5个参数为$5。"[root@localhost~]#bashvariable.shonetwothreefourfive当前脚本名称为variable.sh总共有5个参数,分别是onetwothreefourfive。第1个参数为one,第3个参数为three,第5个参数为five。【学生】聆听、思考、理解、记录通过教师的讲解和演示,使学生了解shell脚本基础知识,创建和执行shell脚本的方法,以及shell变量的相关知识课堂讨论(5min)【教师】组织学生以小组为单位讨论以下问题:【学生】聆听、思考、小组讨论,由小组代表上台发表讨论结果【教师】与学生一起评价各组的发言,并进行总结通过课堂讨论,巩固所学知识,加深学生对课堂实践(15min)【教师】演示shell脚本的编写方法,然后让学生以小组为单位进行实际操作(1)在“/share”目录下创建一个名为“img_clean.sh”的shell脚本。(2)shell脚本“img_clean.sh”实现的功能是,将系统当前时间信息及“/share/resource”目录下的所有子目录和文件的详细信息追加到“/share/resource/update”文件中,然后将“/share/resource/img”目录移动到“/share/backups”目录下。(3)每周日18点定时执行shell脚本“img_clean.sh”。步骤1登录Linux操作系统打开命令行终端,执行以下命令创建shell脚本“img_clean.sh”。[root@localhost~]#vim/share/img_clean.sh步骤2打开“img_clean.sh”文件按“i”键后输入以下内容,然后保存文件并退出Vim。#!/bin/bashdate>>/share/resource/update #date命令用于获取系统当前时间ls-lR/share/resource>>/share/resource/updatemv/share/resource/img/share/backups步骤3执行以下命令执行shell脚本“img_clean.sh”。[root@localhost~]#cd/share[root@localhostshare]#chmodu+ximg_clean.sh[root@localhostshare]#./img_clean.sh步骤4执行以下命令创建并编辑周期性计划任务。[root@localhostshare]#crontab-e018**7/usr/bin/bash/share/img_clean.sh……(详见教材)【学生】按照要求进行操作,如遇问题可自行扫码观看“了解简单的shell脚本”视频,或者询问老师【教师】巡堂辅导,及时解决学生遇到的问题,根据学生的表现完成任务评价表7-1-1任务评价项目名称评价内容评价分数分值自评互评师评职业素养考核项目(30%)考勤、仪容仪表10分安全意识、责任意识10分团队合作与交流10分专业能力考核项目(70%)积极参与教学活动10分15分任务实施过程记录的完成度15分创建和执行shell脚本的熟练度15分编写简单shell脚本的熟练度15分合计:综合分数自评(20%)+互评(20%)+师评(60%)100分综合评语教师(签字):通过具体实践,让学生将所学知识与实践相结合,培养学生的实操能力第二节课传授新知

(15min)【教师】介绍条件测试语句、if语句和case语句的相关知识一、条件测试语句shell脚本中的条件测试语句可以测试条件表达式的值,若它为真,则返回数字0,否则返回非0。在shell脚本中,条件测试语句可使用test命令来完成,其语法格式如下。test条件表达式条件测试语句也可使用判断符号“[]”来完成,其语法格式如下。[条件表达式]【提示】test命令的使用方法和“[]”基本一致,只是“[]”常用在if语句中。在“[条件表达式]”格式中,“[”“]”与条件表达式之间至少有一个空格。按照测试对象来划分,条件测试语句可分为文件测试语句、逻辑测试语句、整数比较语句和字符串比较语句。1.文件测试语句文件测试语句用于测试文件是否存在或是否具有某种权限等。常用的文件测试运算符及其含义如表7-2-2所示。✈【教师】通过多媒体展示“常用的文件测试运算符及其含义”表格,介绍相关知识表7-2-2常用的文件测试运算符及其含义运算符含义-e测试文件是否存在-f测试文件是否为普通文件-d测试文件是否为目录-r测试当前用户对某文件是否具有“可读”权限-w测试当前用户对某文件是否具有“可写”权限-x测试当前用户对某文件是否具有“可执行”权限【实例7-2-1】测试“/etc/passwd”文件是否为目录。[root@localhost~]#[-d/etc/passwd]#显示上一条命令执行后的返回值[root@localhost~]#echo$?1以上执行结果返回1(非0),表示“/etc/passwd”文件不是目录。2.逻辑测试语句逻辑测试语句用于对条件表达式的值进行逻辑分析。常用的逻辑测试运算符及其含义如表7-2-3所示。✈【教师】通过多媒体展示“常用的逻辑测试运算符及其含义”表格,介绍相关知识表7-2-3常用的逻辑测试运算符及其含义运算符含义&&(逻辑“与”)当“&&”前面的条件表达式为真时才会执行后面的表达式。两个条件表达式的值同时为真,则返回真;否则为假||(逻辑“或”)当“||”前面的条件表达式为假时才会执行后面的表达式。两个条件表达式的值同时为假,则返回假;否则为真!(逻辑“非”)将条件表达式的值取反,即如果之前为真,则将其变为假;之前为假,则将其变为真【实例7-2-2】逻辑测试语句的应用。#测试“/scripts/example7-1.sh”文件是否存在,若存在则输出“exist”[root@localhost~]#[-e/scripts/example7-1.sh]&&echo"exist"exist#测试“/scripts/example.sh”文件是否存在,若不存在则输出“notexist”[root@localhost~]#[-e/scripts/example.sh]||echo"notexist"notexist#使用系统环境变量USER查看当前登录的用户[root@localhost~]#echo$USERroot#测试当前用户是否为root用户[root@localhost~]#[!$USER=root]||echo"administrator"administrator【高手点拨】逻辑“非”运算符“!”应放到条件表达式的前面,表示对整个条件表达式的值进行取反操作。例如,条件表达式“[!$USER=root]”不能写为“[$USER!=root]”,因为“!=”表示不等于,尽管执行效果一样,但缺少了逻辑关系。3.整数比较语句整数比较语句仅是对数字的操作。常用的整数比较运算符及其含义如表7-2-4所示。✈【教师】通过多媒体展示“常用的整数比较运算符及其含义”表格,介绍相关知识表7-2-4常用的整数比较运算符及其含义运算符含义运算符含义-eq是否等于-lt是否小于-ne是否不等于-ge是否大于等于-gt是否大于-le是否小于等于【实例7-2-3】整数比较语句的应用。[root@localhost~]#[100-ge88][root@localhost~]#echo$?0[root@localhost~]#num=512[root@localhost~]#[$num-lt1024]&&echo"小于"小于【提示】整数比较语句不能将数字与字符串、文件等一起操作。4.字符串比较语句字符串比较语句用于测试字符串是否为空,或两个字符串是否相同。常用的字符串比较运算符及其含义如表7-2-5所示。✈【教师】通过多媒体展示“常用的字符串比较运算符及其含义”表格,介绍相关知识表7-2-5常用的字符串比较运算符及其含义运算符含义运算符含义=测试字符串内容是否相同-z测试字符串内容是否为空!=测试字符串内容是否不同-n测试字符串内容是否不为空【实例7-2-4】字符串比较语句的应用。[root@localhost~]#[-z$String]&&echo"该变量为空,未定义"该变量为空,未定义二、if语句if语句是条件判断语句,使用if语句可以根据某些条件执行指定的命令。if语句可分为单分支if语句、双分支if语句和多分支if语句。1.单分支if语句单分支if语句由if、then和fi关键词组成,其语法格式如下。if条件表达式 then命令列表fi以上语句的执行过程是,先判断条件表达式的值,如果它为真,则执行then之后的命令列表;否则结束退出。【实例7-2-5】单分支if语句的应用。【参考代码】[root@localhost~]#vim/scripts/example7-9.sh#!/bin/bashFile="/scripts/example7-8.sh" #定义变量if[!-e$File] #判断“/scripts/example7-8.sh”文件是否存在 then touch$File #如果不存在,则创建fi 【执行结果】[root@localhost~]#bash/scripts/example7-9.sh#查看“/scripts/example7-8.sh”文件是否创建成功[root@localhost~]#ls-l/scripts总用量8-rwxr--r--.1rootroot2312月117:12example7-1.sh-rw-r--r--.1rootroot012月117:40example7-8.sh-rw-r--r--.1rootroot19112月117:40example7-9.sh【脚本分析】由于“/scripts/example7-8.sh”文件不存在,则对其取反之后变为存在,此时if条件表达式的值为真,则执行then之后的命令,即使用touch命令创建“/scripts/example7-8.sh”文件。2.双分支if语句双分支if语句由if、then、else和fi关键词组成,其语法格式如下。if条件表达式 then命令列表else命令列表fi以上语句的执行过程是,先判断条件表达式的值,如果它为真,则执行then之后的命令列表;否则执行else之后的命令列表。【实例7-2-6】双分支if语句的应用。【参考代码】[root@localhost~]#vim/scripts/example7-10.sh#!/bin/bashFile="/scripts/example7-8.sh" #定义变量#判断“/scripts/example7-8.sh”文件是否存在if[!-e$File] then touch$File #如果不存在,则创建else chmodu+x$File #如果存在,则赋予其可执行权限fi【执行结果】[root@localhost~]#bash/scripts/example7-10.sh#查看“/scripts/example7-8.sh”文件是否具有可执行权限[root@localhost~]#ls-l/scripts/example7-8.sh-rwxr--r--.1rootroot012月117:40/scripts/example7-8.sh【脚本分析】由于“/scripts/example7-8.sh”文件已经存在,则对其取反之后变为不存在,此时if条件表达式的值为假,则执行else之后的命令,即使用chmod命令赋予“/scripts/example7-8.sh”文件可执行权限。3.多分支if语句多分支if语句由if、then、elif、else和fi关键词组成,其语法格式如下。if条件表达式1 then命令列表1elif条件表达式2 then命令列表2……else 命令列表nfi以上语句的执行过程是,先判断条件表达式1的值,如果它为真,则执行命令列表1;否则,判断条件表达式2的值,如果它为真,则执行命令列表2;依次类推,如果条件表达式的值都为假,则执行命令列表n。【实例7-2-7】多分支if语句的应用。【参考代码】[root@localhost~]#vim/scripts/example7-11.sh#!/bin/bashread-p"请输入成绩:"scoreif[$score-ge90] #如果score大于等于90,输出“优” then echo"优"elif[$score-ge80] #如果score大于等于80,输出“良” then echo"良"elif[$score-ge70] #如果score大于等于70,输出“中” then echo"中"elif[$score-ge60] #如果score大于等于60,输出“及格” then echo"及格"else #如果score小于60,输出“不及格” echo"不及格"fi【执行结果】[root@localhost~]#bash/scripts/example7-11.sh请输入成绩:80良[root@localhost~]#bash/scripts/example7-11.sh请输入成绩:55不及格【脚本分析】使用read命令的“-p”选项从键盘输入成绩“score”的值,然后对其进行判断。因为80小于90,所以if条件表达式的值为假,继续判断。又因为80大于等于80,所以第一个elif条件表达式的值为真,则输出“良”。由于输入55时,所有条件表达式的值都为假,故执行else之后的命令,即输出“不及格”。【知识库】if语句是可嵌套的,也就是说,一个if语句可在其中包含另一个if语句。关键词fi标志着if语句的结束,应与if成对使用。三、case语句case语句是多分支条件判断语句,由case、in和esac关键词组成,其语法格式如下。case变量值in模式字符串1) 命令 …… 命令;;……模式字符串n) 命令 …… 命令;;*) 命令 …… 命令;;esaccase语句的执行过程是,用给定变量值依次与各模式字符串进行比较,如果与某一个模式字符串匹配,那么就执行该模式字符串之后的命令,直至遇到两个分号为止。如果给定变量值与所有模式字符串都不匹配,则执行“*)”之后的命令。【小技巧】在大多数情况下,如果存在很多条件,则可以使用case语句代替if语句。【实例7-2-8】根据指定省份输出省会。【参考代码】[root@localhost~]#vim/scripts/example7-12.sh#!/bin/bashcase$1in guangdong) #如果变量值是“guangdong”,输出“guangzhou” echo"guangzhou";; henan) #如果变量值是“henan”,输出“zhengzhou” echo"zhengzhou";; hubei) #如果变量值是“hubei”,输出“wuhan” echo"wuhan";; *) #如果变量值是其他字符串,输出“error” echo"error";;esac【执行结果】[root@localhost~]#bash/scripts/example7-12.shhubeiWuhan[root@localhost~]#bash/scripts/example7-12.shshanerror【脚本分析】第一次执行该脚本时变量值是“hubei”,它与模式字符串“hubei”匹配,则执行该模式字符串之后的命令,输出“wuhan”。第二次执行该脚本时变量值是“shan”,它与所有模式字符串都不匹配,则执行“*)”之后的命令,输出“error”。在使用case语句时应注意以下两个方面。(1)模式字符串中可使用正则表达式。【实例7-2-9】从键盘输入一个字符,然后判断该字符是字母、数字还是其他字符,并输出相应的提示信息。【参考代码】[root@localhost~]#vim/scripts/example7-13.sh#!/bin/bashread-p"请输入一个字符:"KEYcase$KEYin [a-z]|[A-Z]) #如果输入一个字母,输出“输入的是字母” echo"输入的是字母";; [0-9]) #如果输入一个数字,输出“输入的是数字” echo"输入的是数字";; *) #如果输入的既不是字母也不是数字 echo"输入的是其他字符" #输出“输入的是其他字符” echo"可能是空格、功能键等";; #输出“可能是空格、功能键等”esac【执行结果】[root@localhost~]#bash/scripts/example7-13.sh请输入一个字符:3输入的是数字[root@localhost~]#bash/scripts/example7-13.sh请输入一个字符:s输入的是字母[root@localhost~]#bash/scripts/example7-13.sh请输入一个字符:~输入的是其他字符可能是空格、功能键等【脚本分析】第一次执行该脚本时从键盘输入数字3,它与模式字符串“[0-9]”匹配,则执行该模式字符串之后的命令,输出“输入的是数字”。第二次执行该脚本时从键盘输入字母“s”,它与模式字符串“[a-z]|[A-Z]”匹配,则执行该模式字符串之后的命令,输出“输入的是字母”。第三次执行该脚本时从键盘输入字符“~”,它与所有模式字符串都不匹配,则执行“*)”之后的命令,输出“输入的是其他字符”“可能是空格、功能键等”。(2)如果一个模式字符串中包含多个模式,那么各模式之间须用竖线(|)隔开(如实例7-2-9中的“[a-z]|[A-Z]”),表示各模式之间是“或”的关系,即只要给定变量值与其中一个模式匹配,就会执行该模式字符串之后的命令。【实例7-2-10】在case语句中“或”的应用。【参考代码】[root@localhost~]#vim/scripts/example7-14.sh#!/bin/bashcase$1in start|begin) #如果变量值是“start”或“begin”,输出“startInternet” echo"startInternet";; stop|end) #如果变量值是“stop”或“end”,输出“stopInternet” echo"stopInternet";; *) #如果变量值是其他字符串,输出“Ignorant” echo"Ignorant";;esac【执行结果】[root@localhost~]#bash/scripts/example7-14.shbeginstartInternet【脚本分析】执行该脚本时变量值是“begin”,它与模式字符串“start|begin”中的“begin”模式匹配,则执行该模式字符串之后的命令,输出“startInternet”。【学生】聆听、思考、理解、记录通过教师的讲解和演示,使学生了解条件测试语句、if语句和case语句的相关知识课堂讨论(10min)【教师】组织学生以小组为单位讨论以下问题:【学生】聆听、思考、小组讨论,由小组代表上台发表讨论结果【教师】与学生一起评价各组的发言,并进行总结通过课堂讨论,巩固所学知识,加深学生对条件判断语句课堂实践(15min)【教师

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论