01-研发基础课程-基于命令的编程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

基于命令(胶水)的编程语言SHELL、AWK、PERL2013.05必修选修公开保密2本课程主要讲述基于命令行模式的shell、awk编程,并初步描述perl在数据处理中的一般使用方式;这几种编程语言的特点是短小、起到串联程序的作用,配合操作系统自带的crontab,能够比较好的执行周期性的任务,多用于应用程序的定时执行、维护过程中的周期性、规律的错误检查;说明4开发语言5怎样学习一门开发语言变量定义保留字、系统变量逻辑控制:判断、循环程序结构:必须的模块如何连接数据库文件操作控件、组件互相调用及传递低层硬件操作协议操作如何优化异常处理数据库原理数据结构编译原理6变量定义-匈牙利命名法前缀类型例子备注LmClassLmObject表示类型本身不与范围前缀结合使用IInterface接口IUnknown一般情况下,变量的取名方式为:scope_+prefix_+qualifier。范围前缀_,类型前缀_,限定词。前缀类型例子备注g_全局作用域g_Serversm_成员变量m_pDoc,l_局部作用域l_strName少用范围前缀前缀类型内存规格描述例子chchar8-bitcharacterchGradechTCHAR16-bitcharacterif_UNICODEisdefinedchNamebBOOLBooleanvaluebEnablednintInteger(sizedependentonoperatingsystem)nLengthnUINTUnsignedvalue(sizedependentonoperatingsystem)nLengthwWORD16-bitunsignedvaluewPoslLONG32-bitsignedintegerlOffsetdwDWORD32-bitunsignedintegerdwRangep*AmbientmemorymodelpointerpDoclpFAR*FarpointerlpDoclpszLPSTR32-bitpointertocharacterstringlpszNamelpszLPCSTR32-bitpointertoconstantcharacterstringlpszNamelpszLPCTSTR32-bitpointertoconstantcharacterstringif_UNICODEisdefinedlpszNamehhandleHandletoWindowsobjecthWndlpfn(*fn)()callbackFarpointertoCALLBACKfunctionlpfnAbort类型缩写7编程几个好习惯动手编码之前,你需要对要编码实现的解决方案有一个正式的或粗略的设计。永远不要在没有任何设计的前提下就开始编码,除非所编代码不重要。优秀的代码文档跟编程语言知识一样重要。在代码源文件中,为每个主要的代码段添加注释,解释代码的基本逻辑。最好注明程序的构建和修改日期,以及修改的原因也是非常有必要的。维护程序的各个版本同样重要。有些编程工具都自带一个版本管理工具。无论你什么时候改变自己的程序,它们都会将其保存为.bak文件如果工程包含多个源文件,则创建一个README文件,注明每个源文件、数据文件、临时文件以及日志文件(如果有的话)的作用。你还可以注明编译和运行步骤有时候,你一定想知道为什么IF语句没有得到预想的结果。可能你使用的是等号,也就是“=”,而不是条件判定符号“==”。一个比较好的办法是用相反的顺序写条件语句。因此,你的条件语句应该如下:if(10==i)…因此,如果你错误地写成了单个等于号,在编译的时候也能检查出来并报错使用循环和条件语句时,先把左右括号对应起来,然后再在里面写其他语句使用有意义的变量和函数名称。例如,使用‘radius’来代替圆的半径,而不是用‘r’来表示。同样,函数名‘calculateArea’要比其他任何隐晦的缩写要好得多。匆忙之下,我们也许会使用缩写的变量名,但一开始节省时间的话,之后会浪费更多的时间,去猜测缩写变量名代表什么为后面的调试使用打印语句,这是个好习惯。但是,当完成最后代码后,去掉这些语句,有时也是一项危险的任务。添加一个方法,用于输出调试信息。当最终版本生成时,只要把这个方法注释掉就行。因此,只在一个地方做修改就可以了代码编写完之后,开始优化代码。之前声明的一些变量,现在可能没用了。同样,并不依赖循环的一些声明可以移到循环模块之外去。扎实的编译知识同样会对以后的代码优化有所帮助对自己的操作系统和硬件要有足够的了解,你可以从资源占用等方面提升程序的性能编写代码时要合理使用缩进,以使代码清晰可读研究别人编写的代码。这可以让你学习到新的编程技术,以及他们解决和你相同的任务时所使用的方法最后一条(但不是最不重要的一条),备份源代码文件,这样当硬盘出错或相同的问题发生时,不至于前功尽弃。8SHELL、AWK、PERL的特点都是解释性执行的开发语言;SHELL、AWK不能完全称之为一门独立的开发语言,不合适完成大型的应用系统;变量都没有类型的限制,仅在上下文使用环境中才能区分出其类型;命令行方式明显,大量的程序构成是独立的命令,这些命令基本来自于操作系统本身基本上没有界面开发能力系统结构基于调用,触发少正则表达式通用,并且是关键,体现出灵活性,单独学习正则表达式项目SHELLAWKPERL引号双引号内变量被解析,单引号内是字符串双引号内是字符串,单引号内变量被解析双引号内变量被解析,单引号内是字符串比较符字符型比较符判断数字一套字符型比较符判断字符Awk的双引号内如果是os的命令,则可以被执行,如print$2|”sort”10SHELL不适合的场景复杂的大项目需要灵活处理文件的程序,SH只能逐行读出文件进行处理需要图形用户界面的程序需要直接与系统硬件打交道的程序需要访问I/O端口和网络套接字的程序需要使用库或和以前的其他代码整合的程序11SHELLBSH,缺省SHELLCSHKSH,融合了BSH和CSH的优点基本一样,个别语法上有区别切换时执行对应SHELL程序,如ksh12SHELL-初识13SHELL-变量如果在一个字符串中引用变量不容易被区分,使用${变量名},如计费话单的文件名里替换账期FILEBILL${BILL}XXX.txt;在双引号中可以被变量值替换,在单引号中无法替换;14SHELL-系统变量$IFS这个变量中保存了用于分割输入参数的分割字符,默认识空$HOME这个变量中存储了当前用户的根目录路径。$PATH这个变量中存储了当前Shell的默认路径字符串。$PS1表示第一个系统提示符。$PS2表示的二个系统提示符。$PWD表示当前工作路径。$EDITOR表示系统的默认编辑器名称。$BASH表示当前Shell的路径字符串。$0,$1,$2,...表示系统传给脚本程序或脚本程序传给函数的第0个、第一个、第二个等参数。$#表示脚本程序的命令参数个数或函数的参数个数。$$表示该脚本程序的进程号,常用于生成文件名唯一的临时文件。$?表示脚本程序或函数的返回状态值,正常为0,否则为非零的错误号。$*表示所有的脚本参数或函数参数。$@和$*涵义相似,但是比$*更安全。$!表示最近一个在后台运行的进程的进程号。$RANDOM获取随机变量1-65535间的整数;15SHELL-变量使用16SHELL-变量计算17SHELL-引号的使用18SHELL-通配符正则表达式,模式匹配:^开始,$结束,^$空行19SHELL-状态判断20SHELL-条件判断21SHELL-条件判断(续)22SHELL-测试文件test–daaa23SHELL-条件控制24SHELL-程序退出为了避免程序重复执行,可以使用文件来判断25SHELL-FOR循环26SHELL-FOR循环27SHELL-WHILE28SHELL-出口break退出当前循环,继续下面的语句continue退出循环的本次运行,进行下一个循环exit退出程序return返回值,一般函数使用filenm=`ls/etc`forafilein$filenmdoif[$afile==“XXX”];thenbreakcontinueexit1fidone29SHELL-CASE30SHELL-函数提高复用,简化程序结构31SHELL-界面32SHELL-程序结构#!/bin/sh#########################程序说明#########################跟踪程序执行set–x#函数定义func()#若干命令或循环、判断等cd#退出,也可以不写exit033SHELL-程序可以把帮助等写成函数,判断执行参数展示对应内容34下面的脚本将会提示如下的信息:1)希望登录的远程主机。2)文件传输的类型是二进制方式还是ASCII方式。3)要下载的文件名。4)存放下载文件的本地目录。实现脚本如下:SHELL-程序-ftp35shell脚本一个常用的用途就是访问数据库系统获得信息。实现这样的功能,是再理想不过了。可以用它来输入你在面对数据库提示时所做的各种选择。下面的例子介绍如何使用来连接其他应用程序,完成相应的任务。SHELL-程序-db36SHELL-定时或周期运行-crontabcrontab命令举例说明crontabmyfile将myfile的内容取代crontabs原内容crontab-r删除现有的crontabs文件crontab-l显示现有的crontabs文件内容crontab–e编辑现有的crontabs文件内容各字段取值举例说明*表示任何时间1,3,4表示离散数字1-5表示从1到51-3,5表示从1到3,还有5collrecord.sh2013041/log/col.log2/dev/nullcollrecord.sh201304&/dev/null.profile命令环境初始化,也可以单独写一个env的程序先执行38AWKAWK是一种用于处理文本的编程语言工具。AWK在很多方面类似于shell编程语言,尽管AWK具有完全属于其本身的语法。它的设计思想来源于SNOBOL4、sed、MarcRochkind设计的有效性语言、语言工具yacc和lex,当然还从C语言中获取了一些优秀的思想。在最初创造AWK时,其目的是用于文本处理,并且这种语言的基础是,只要在输入数据中有模式匹配,就执行一系列指令。该实用工具扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。AWK:Aho、Weinberger、Kernighan39AWK-执行方式40AWK-执行方式1.常用模式awk‘pattern{action}’filenameawk扫描filename中的每一行,对符合模式pattern的行执行操作action.特例:①awk‘pattern’filename显示所有符合模式pattern的行②awk‘{action}’filename对所有行执行操作action复杂的模式是把‘pattern{action}’替换为一个awk的程序41AWK-执行方式$catemployeesTomJones44245/12/66543354MaryAdams543611/4/6328765SallyChang16547/22/54650000BillyBlack16839/23/44336500$awk‘/Mary/’employeesMaryAdams543611/4/6328765$awk‘{print$1}’employeesTomMarySallyBilly$awk‘/Sally/{print$1$2}’employeesSallyChang42AWK-执行方式2.从其它命令输入格式:comm

1 / 81
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功