欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    《Shell脚本编程》PPT课件-(2).ppt

    • 资源ID:34133672       资源大小:251.50KB        全文页数:130页
    • 资源格式: PPT        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《Shell脚本编程》PPT课件-(2).ppt

    本章参考教材nUnix技术大全系统管理员卷机械工业出版社nLinux与Unix Shell编程指南机械工业出版社nAdvanced Bash Scripting Guide, by Mendel Cooper, 电子书籍n其他网上资源基本概念nUnix/Linux系统中供用户使用的界面,为用户提供了输入命令和参数并可得到命令执行结果的环境。Unix/Linux中的ShellnBourne Shell或Posix ShellnKorn ShellnBourne Again ShellnZ ShellnC ShellnTCShellWindows中的Shelln传统:DOS批处理文件(*.bat)nWSH(Windows Script Host)nVBScript(*.vbs)nJscript(*.js)nC:windowssampleswshnASP(Active Server Pages)n*.aspnVBScript或Jscript脚本语言n在浏览器中运行脚本基本概念nShell的特点n命令行解释n使用保留字n使用Shell元字符(通配符)n可处理程序命令n使用输入输出重定向和管道n维护变量n进行Shell环境控制n支持Shell编程常见Shell命令n文件安全与权限n后台执行命令nShell输入与输出n文本过滤grep家族正则表达式n登陆环境文件安全与权限n-rw-r-r- 1 wlzhang unknown 14 Jan 16 2003 pg.txtn-rw-r-r- 1 wlzhang unknown 20 Jan 10 2002 test.txtn文件权限位n文件硬链接数目n文件属主n属主所在的默认组n文件长度n文件更新时间n文件名文件安全与权限n文件权限位n-rw-r-rn文件属主权限n同组用户权限n其他用户权限n文件类型:nd, l, s, b, c, p, -文件安全与权限n改变权限位符号模式nchmod u+x file1nu, g, o, an+, -, =nx, r, w, s, t, ln例子nchmod u+x o-w myfile文件安全与权限n改变权限位绝对模式nchmod R 664 /usr/local/home/*文件安全与权限n目录的权限nr: 可以列出该目录中的文件nw: 可在该目录中创建或删除文件nx: 可搜索或进入该目录n例如:同组用户对某一目录的权限位为-x, 可否执行该目录下设置执行位的脚本?文件安全与权限n目录的权限n目录的权限覆盖该目录中文件的权限drwx r- r- dir1该目录下文件f1权限为-rwxrwxrwx f1则同组用户无法编辑该文件或访问该目录(Bourne Shell)文件安全与权限nsuid/guidn设置suid/guidnchmod 4755 f2n第一个为4:设置suid 2: 设置guid 6: 同时设置suid和guid文件安全与权限nchown和chgrp:改变文件的属主和属组nchown一般形式nchown -R -h owner filen例子:nchown pauline projectnchgrp admin projectn注:改变文件的所有权时,相应的suid、guid被清除文件安全与权限n查看umask值:umask命令umask值目录文件022755644027750640002775664006771660007770660文件安全与权限n软链接和硬链接nln -s sourcefile destfilen可以用ln命令为文件建立其他的名字find和xargsnfind pathname options -print -exec -oknfind . maxdepth 1 name “t*” printnfind -name “A-Z*” printn-namen-permn-type: b, d, c, p, l, fn-usern-groupn-mtime n +nn-follown-newer file1 ! newer file2n-size +nc nc ncfind和xargsnfind . -name leap -prune -o -name t* printnfind . name “a-za-z0-90-9.txt” printnfind . perm 755 printnfind /etc user uucp printnfind / -mtime 5 printnfind /var/adm mtime +3 printnfind . -newer chp7_10.sh ! -newer hello.sh -printntouch t 09170000 idlefind . newer idle -printfind和xargsnfind /etc type d printnfind . size +10 printnfind / -name “CON.FILE” depth printnfind . type f exec ls l ;nfind . type f name “cw*” ok ls l ;nfind . name “*.log” mtime +5 ok rm ;find和xargsnfind命令中-exec选项,容易导致:n参数列太长n进程过多,性能下降nfind命令与xargs命令结合n分批处理find命令传出的参数nxargs命令只有一个进程find和xargsnfind / name “core” print | xargs /tmp/core.lognfind /apps/audit perm 0777 | xargs chmod go-wnfind / -type f print | xargs grep “device”nfind . name * -type f print | xargs grep “DBO”后台执行命令n设置crontab文件,用它来提交作业(cron)n用at命令提交作业(at)n在后台提交作业(&)n用nohup命令提交作业(nohup)后台执行命令cron和crontabncron:系统调度进程,自动调度用户的作业ncrontab:允许用户提交、编辑或删除相应的作业n用户能否拥有crontab文件,通过ncron.denyncron.allow 来管理后台执行命令cron和crontabncrontab文件六个域n分:159n时:023n日:131n月:112n星期:06n要运行的命令n域之间用空格分割,每个域可有-、,、*后台执行命令cron和crontabncrontab文件例子:30 21 * * * /apps/bin/cleanup.sh45 4 1,10,22 * * /apps/bin/backup.sh10 1 * * 6,0 /bin/find name “core” exec rm ;0,30 18-23 * * * /aaps/bin/dbcheck.shn注:运行的命令或脚本绝对路径的形式,并在脚本中设置相应的环境变量crontab命令ncrontab -u user e l rn用编辑器创建文件cwcron,每1小时提醒时间(如何写?)ncrontab cwcron将此作业提交给cron进程ncrontab l / crontab e / crontab rn进行备份at命令n向cron守护进程提交作业,稍后运行n为提交的作业保留当前环境变量,包括路径,作业的输出发送电子邮件(或重定向)nat -f script -m l r time daten命令行方式或者at命令提示符at命令n$ at 21:30nat find / -name “passwd” printnat n系统返回Job ID:job 1n从邮件中获得结果信息at命令n接受的日期/时间格式:nH、HH.MM、HH:MM、H:M、am、pmnat 6.45am May 12nat 11.10pmnat now + 1 hournat 9am tomorrownat 15:00 May 24nat now + 10 minutesat命令natq命令或at l命令n$ at l n22003-09-02 23:00 an32003-09-22 13:20 an42003-09-03 09:00 an12003-09-03 12:00 anatq c, atq nat命令n清除作业n先执行at l命令,获得作业标识n再使用at r清除该作业&命令n将费时的作业放至后台运行,系统返回进程号n完成时,按任一键出现完成提示n将输出重定向n查看进程ps nohup命令n使后台进程在用户退出登录时继续运行n作业的输入输出重定向到nohup.out中nnohup command &n可通过提交脚本一次提交多个命令Shell输入与输出n标准输入n标准输出n标准错误输出n输入输出的重定向Shell输入与输出necho命令n显示文本或变量necho hello worldnecho “hello world”necho hello worldnvar=“hello world”echo $varecho “$var”echo $varnecho “007”necho e “007”necho $007n转义n, r, t, v, b, a0 xx(八进制)echo5_2.shecho $variable01 echo echo Hello, he said. Shell输入与输出n转义nvariable= echo $variable nvariable=23skidoo echo $variable nvariable=echo $variable nvariable=echo $variable n的转义作用Shell输入与输出necho命令necho “something ” myfilenecho “something ” myfilenecho “ now is date”Shell输入与输出nread命令n从键盘或文件的某一行文本中读入,并赋予一个变量nread nameHello how are younread name surnameJohn Doenread name surnameJohn Lemon Doen参看例子脚本ntest.shShell输入与输出ncat命令n显示文件内容、创建文件、显示控制字符ncat myfilencat v myfile (-v显示控制字符,M)n用cat命令创建新文件ncat myfilen管道命令(|):把一个命令的输出传递给另一个命令作为输入 ls | grep myfilewho | awk print $1 “t” $2df k | awk print $1 | grep v “Filesystem”df k | awk print $1 | grep v “Filesystem” | sed s/C:cygwin/gShell输入与输出ntee命令n将输出的副本送到标准输出,另一个副本拷贝到相应文件中ntee a files(-a:追加到文件中)nls l | tee ls.outnecho “something” | tee /dev/consoleShell输入与输出n标准输入、输出和错误n标准输入:文件描述符0,默认键盘n标准输出:文件描述符1,默认屏幕n标准错误:文件描述符2,默认屏幕n输入输出的重定向Shell输入与输出command filenamecommand filenamecommand 1filename command 1filename command 2filename command 2filename command &filename =command filename 2&1( != 2&1 filename)n2&1 ni &jn&jn0 filename filenamenjfilename (见file1.sh)n&:文件描述符的复制,j复制到iShell输入与输出ncat myfile /dev/nullngrep “sky” absentfile 2grep.errncat existfile absentfile 1rec.out 2rec.errncleanup cleanup.out 2&1(将标准输出和标准错误重定向到文件中)文本过滤正则表达式n元字符:正则表达式中描述模式匹配操作的特殊字符n只匹配行首字符n$只匹配行尾字符n*任意多个字符n匹配其中单个或字符的范围n对特殊元字符进行转义n.单个字符文本过滤正则表达式npatternn匹配模式出现n次npatternn, 含义同上,但次数最少为nnpatternn,m含义同上,但出现次数在n与m之间n?模式出现0次或1次n*模式出现任意多次n+模式出现1次或更多次文本过滤正则表达式n.x.x.xndnsh$n.$n$n.n.2n*.pasnt.*.sh$nt*.sh$n0123456789n0-9na-zA-Z0-9-n0-9nabcn1n中都是单个字符匹配文本过滤正则表达式n重复表示符号前面的模式重复出现的次数n*、+、?n23*4n对于1548 Kerry 534 正则表达式1.*4 匹配整行,而不是154 文本过滤正则表达式n(a-z)(a-z)21 :匹配anna,qwwq等nA2B:匹配AABnA4,B:nA2,4B:n:匹配单词结束B:不在单词开始或结束文本过滤正则表达式n正则表达式的连接n正则表达式的“或”操作(|)n执行优先次序n重复*,+,?n连接n或:|n可用括号改变顺序文本过滤常用正则表达式nlnthengr(a|e)y n(To:|From:) (Seaman|Ramsay )n0-92-0-92-0-94na-za-z*n.0-90-9文本过滤grep命令ngrep option regexp filesngrep “hello” *ngrep c “hello” hello.sh (显示出现次数)ngrep l “hello” *(显示匹配文件名)ngrep n “hello” hello.sh (显示匹配的行及行号)ngrep v “hello” hello.sh (显示不匹配的行)ngrep i “hello” hello.sh(大小写不敏感)ngrep s “hello” hello.sh (屏蔽出错信息)文本过滤grep命令ngrep、正则表达式,与系统命令ngrep testngrep l2, testnls l | grep dnls l | grep d.x.x.xnps ax | grep “named”nps ax | grep “named” | grep v “grep”文本过滤egrep命令negrep:expression or extended grepn-f 选项使用文件作为匹配参数ncat hello.parahelloworldnegrep f hello.para hello.sh文本过滤egrep命令nwho | egrep (user1|user2|user3)nwho | egrep v (user1|user2)negrep (yellow|red) flower(s)? *文本过滤awk命令nawk -F field-separator commands input-file(s)n在文本文件或字符串中按一定规则浏览和抽取信息n命令、程序、语言n用awk语言编写脚本nawk f awk-script-file input-file(s)文本过滤awk命令nawk BEGIN BEGIN语句 处理数据 END 完成处理 filename文本过滤awk命令n例子:grade.txtM.Tansley 05/99 48311Green 8 40 44J.Lulu 06/99 48317green 9 24 26P.Bunny 02/99 48 Yellow 12 35 28J.Troll 07/99 4842 Brown-3 12 26 26L.Tansley 05/99 4712 Brown-2 12 30 28 文本过滤awk命令nawk print $0 grade.txtnawk print $1,$4 grade.txtnawk BEGIN print “Namen-”print $1 END print “end-of-report” grade.txt文本过滤awk命令nawk if($4/Brown/) print $0 grade.txtnawk $0 /Brown/ grade.txtnawk if($3/48/) print $0 grade.txtnawk $3=“48” print $0 grade.txtnawk $0 ! /Brown/ grade.txtnawk if($6 0 & $4 /Brown/)print $0 grade.txtnecho pwd | awk F/ print $NF文本过滤awk命令nawk name=$1;belts=$4;if (belts/Yellow/) print name “ is belt ” belts grade.txtnawk if ($1 = “M.Tansley”) $6=$6-1;print $1,$6,$7 grade.txtnawk if($1 = “J.Troll”) ($1=“J.L.Troll”);print $1 grade.txtnawk BEGINprint “NametDifference”if($6 out-file)sed用法nsed选项:n-n:不打印n-f: 执行脚本n-h:帮助信息n-v:版本信息n-e:使用sed命令编辑nsed中定位文本n行号n正则表达式sed用法n例子文件:quote.txtnsed 2p quote.txtnsed n 2p quote.txtnsed n 1,3p quote.txtnsed -n /e/p quote.txtn sed -n /The/p quote.txtn sed -n 4,/The/p quote.txtsed用法n sed -n /$/p quote.txtn sed -n 1,$p quote.txtnsed n /.*ing/p quote.txtnsed -e /music/= quote.txtnsed -n /music/= quote.txtnsed -n -e /music/= -e /music/p quote.txtsed用法n附加文本: aaddressatexttext.textn插入文本 in修改文本行 c,可接受地址范围nsed -e /company/ aThen suddenly it happend.It is really a disaster. quote.txtnsed脚本(见append.sed, insert.sed, update.sed, mix.sed)sed用法n删除文本sed 1d quote.txt sed 1,3d quote.txtsed $d quote.txtsed /Neave/d quote.txtsed用法n替换文本address,address s/pattern-to-find/replace-pattern/ g, p, w, n sed s/night/NIGHT/ quote.txtsed s/$/ quote.txtsed -n s/$/p quote.txtsed s/The/Wow!/g quote.txtsed -n s/The/Wow!/gp quote.txt sed s/The/Wow!/gw sed.out quote.txtsed用法n sed -n s/nurse/Hello &/p quote.txtnsed 1,2 w file2 quote.txtnsed /Neave/w file3 quote.txtn读文本n sed /company/ r sedex.txt quote.txtn sed /.a.*/q quote.txtnsed -n 1,$l func.txtsed用法n常用例子: echo Mr Willis | sed s/Mr/& Bruce/gecho account.doc | sed s/./gecho accounts | sed s/$/.doc/gn x=Department+payrollBuilding G echo $x echo $x | sed s/+/ of /g | sed s/ Located at /gtr命令n用于字符转换或抽取控制字符necho “hellooo, World” | tr s “a-zA-Z”necho “hellooo world” | tr s “a-z” “A-Z”ntr s “015” “n” input_filetr s “r” “n” input_filentr s “015032” “012*” /tmp/messagesrm /var/adm/messages mv /tmp/messages /var/adm/messages echo “finished cleanup”Shell脚本n#!/bin/shn#!/bin/bashn#!/usr/bin/perln#!/usr/bin/tcln#!/bin/sed fn#!/usr/awk -f 登录方式下的shell启动UNIX内核initgettylogin用户有效?/etc/inittab/etc/passwd终端Shell程序用户名和口令命令是否bash的激活模式n交互式标准输入输出连到终端上nlogin:读初始化文件n非login:/.bashrcn受限:禁止一些操作(改变目录、修改$SHELL和$PATH变量、运行exec、运行包含/的命令,及使用重定向等)n非交互式用来运行shell脚本nif -n $BASH_ENV ;then “BASH_ENV”; fibash的激活模式选项n-c stringn-in-r-restrictedn-loginn-posixn-noprofilen-norcn-rcfile filen-verbosen-helpn-version控制bash的行为nsetn可在命令行、初始化文件、脚本中使用nset a (set allexport)nset +an.nshopt命令nshopt s cdable_varsnshopt u cdable_varsn二者都有很多可设置的选项,参看man bash初始化文件n/etc/profilen$HOME/.Bash_profile$HOME/.Bashrc$HOME/.Bash_login$HOME/.profilen设置文件创建的umask和$PATH$TERM、$MANPATH、$PS1、$PS2Shell环境变量n$PATH, $MANPATH, $LD_LIBRARY_PATH, $CD_PATHn$EDITOR, $VISIUALn$MAIL, $MAILCHECKn$HISTSIZE, $HISTFILEn$TERM, $PAGERn.aliasn别名:交互式shell中缩短长命令的方法alias rm=“rm i”alias chomd=“chmod”unlias rmrm关于变量n内部变量nbuilt-in:(vs. shell command)n见internalvars.txtn例子(void.sh, seconds.sh, specialvar.sh)关于变量ndeclare变量的声明ndeclare -r var1 ndeclare -i number (见delcare.sh)ndeclare -a indices ndeclare -f functionsndeclare -x var3 (见declare_x.sh)n对数字类型的操作:expr, let(见let.sh, expr.sh)ny=expr $y + 1y=expr $y + 1 , let y=y+1let y=y+1 , y=$($y+1)y=$($y+1)三者等价n$RANDOM:返回随机数n(.):进行数学运算(见arith.sh)数组n一维数组narea11=23narea13=37narea51=UFOs n或ndeclare a arean$area11n见(array.sh)Shell本地变量n在本次Shell生命期里使用的变量n变量的赋值,参见variable.shn清除变量:unsetn显示变量:setn测试变量necho “The sky is $COLOR:-grey today”necho $File:=mynecho $File:+another参数替换(parameter substitution)DEFAULT_FILENAME=generic.data filename=$1:-$DEFAULT_FILENAME# If not otherwise specified, the following command block operates #+ on the file generic.data. # # Commands follow. 参数替换(parameter substitution)n$parameter?err_msgn$parameter:?err_msgn(见见checkvar.sh)参数替换(parameter substitution)n$var#Pattern, $var#Patternstrip_leading_zero () val=$1#0 return $val 见param_subst.sh关于变量stringnstring的长度n$#string nexpr length $string expr $string : .*n见stringlen.sh, stringmatch.sh, stringindex.sh, stringextract.sh, stringremoval.sh,stringreplace.shShell本地变量n变量的导出export:将变量导出到子进程n(见father.sh和child.sh)nlocal:局部变量参数位置变量n$pg findfilen#!/bin/bashn#findfilenfind / -name $1 printn$./findfile profile参数位置变量n$pg who_isn#!/bin/bashn#who_isngrep $1 passwd | awk F: print $4n$./who_is fangwn例子。 $#, $*,$的例子(见allparams.sh)脚本参数n$0.$9n$#, $*, $nshift命令ngetopts命令n见shift.sh, tr_case.sh, 脚本参数ngetopts用法:n设定标准选项,在脚本或函数参数中查看所有以-开头的参数(即选项串)是否匹配标准选项。如果匹配,将匹配的选项赋给变量ngetopts 标准选项 变量n例如:getopts ahfvc VARn见backup.shshell数字常量n默认10进制n8进制:032n16进制:0 x32n2-64进制:base#number退出/返回状态n$?:返回上一条语句或脚本执行的状态n0:成功n1255:不成功nexit命令nexitnexit nnnShell编程n条件测试n控制流结构(循环、分支等)nshell函数n调试脚本条件测试ntest或:测试命令执行状态、文件状态、比较表达式if cmp a b & /dev/null # Suppress output.then echo Files a and b are identical.“else echo Files a and b differ. fi 条件测试if grep -q Bash filethen echo File contains at least one occurrence of Bash.“fi $ -w vartest.sh $test w vartest.sh条件测试n测试文件状态-d:目录-s:文件非空-f:正规文件-w:可写-L:符号链接-u:文件有suid位-r:可读-x:可执行n例子 条件测试n比较表达式-eq=字符串:-ne!=-gt -n:非空串-lt -z:空串-le=条件测试n逻辑操作n-a, &n-o, |n!n例子gzip.sh控制流结构nif.then.else.fin见ifmkdir.shnif.then.elif.then.fin见ifelif.sh控制流结构ncase $variable in $condition1 ) command. ; $condition2 ) command. ; *)command.;esac n参见case.sh, case2.shcaseparam.shcasevalid.sh控制流结构n循环(while, for, until loops)nfor循环for arg in listdo command(s). done (参见forlist.sh、forparams.sh、forcp.sh)控制流结构nfor循环for ( expr1; expr2; expr3)docommand(s). donen见for_c.sh控制流结构nwhile循环nwhile conditiondo command. done n参见while1.sh、whileread.sh等控制流结构nuntil循环循环nuntil condition-is-truedo command. done n见until.sh控制流结构n循环控制:break, continuenbreak:推出循环或case语句(break-levels.sh)ncontinue:跳过本次循环步shell函数nfunction function_name command. return (exit_status)n nfunction_name () command. 参见functionfile.sh,functions.sh与direc_check.shn在命令行执行函数,顺序先于同名命令shell函数nlocal variablesn生命期只在block或function中n见local.sh子shellnshell脚本subshelln( command1; command2; command3; . )作为子shell运行nexternal command vs. builtinnbuiltin:help nhelp echonhelp getopts创建屏幕输出和输入n创建屏幕输出n控制光标出现与否、光标位置、颜色控制n需要在echo语句中使用控制字符(color.sh);或者:n专门的tput命令(sh) n创建屏幕输入n验证输入数据的有效性。Shell工具n创建日志文件或临时文件n检测信号neval创建日志或临时文件n创建日志文件n根据日志文件创建的日期和时间识别日志文件ndate命令(log.sh) date -date 2 days ago date -date 3 months 1 day date -date 25 Dec +%j date +%B %d date -d 1-may +%B %-d创建日志或临时文件n创建唯一的临时文件n利用$,n当前进程的进程号,作为临时文件扩展名信号n系统向脚本或命令发出的消息,告知某些时间的发生n常用信号1SIGHUP挂起或父进程被杀死2SIGINT键盘中断ctrl+c3SIGQUIT从键盘退出9SIGKILL无条件终止11SIGSEGV内存段冲突15SIGTERM软件终止(kill中默认信号)信号ntrap “name” signalsnname:处理捕捉到的信号的专门函数nsignal(s):逮捕捉的信号ntrap “” 2 3ntrap “command” 2 3ntrap 2 3trap 2 3见trap.shevaln对参数进行两次扫描和替换.nmyfile=“cat ctrlchar1.txt”echo $myfilenmyfile=“cat ctrlchar1.txt”eval echo $myfilenmyfile=“cat ctrlchar1.txt”eval $myfileevaln对最后一个参数的表示neval echo $#ncat dataPCpentiumIVMONITORsvgaNETWORKyesn希望echo $PC,得到pentiumIV(见eval.sh)习题:n写一段脚本,将自己的内容反向输出到标准输出。n提示:逐行将脚本读入,反向显示DOS文件向LINUX下文件的转换wc l (统计文件的行数)n两个文件A, B, 求A-BBash帮助nman bash

    注意事项

    本文(《Shell脚本编程》PPT课件-(2).ppt)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开