资源描述:
《Linux常用命令与Shell基本编程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
Shell脚本基本编程无线产品部katanazhang2009-11-09 课程目标——linux常用命令shell脚本编程awk的用法 (一)Linux常用命令系统文件网络其他 toppsfreevmstatiostatpstreelsoflscdpwdtimeexportdatekill/killallaliasipcsipcrmdfducrontabulimit常用命令——系统 lncatheadtailmorelessrenamewhichwhereiswhodiffgrepcutsortuniqwcjoinmkdirmvrmcplocatefindhistorysplitchmodchownsutargzipgunzip正则表达式常用命令——文件 常用命令——网络、其它sshifconfignetstatsz/rzscppingtcpdumptelnetrsyncexpectcalclearbcman (二)Shell脚本编程概念特点语法实例 什么是Shell•Shell是一个命令解释器•Shell也是一种编程语言•解析语法•执行命令 什么是shell脚本?shell是一种特殊的程序,它是用户与Linux系统内核之间的接口它解释运行由命令行或文件输入的命令,从而实现用户与内核间的交互当输入是文件形式时,这个含有待执行命令的文件就叫做脚本 Shell脚本的用途?数据统计分析进程实时监控小程序的替身… Shell脚本的特点?简单、快速不需要编译灵活高效当要反复使用一个或连续一组命令时,可以用shell脚本很方便的将它们全部执行添加和修改逻辑只需要简单的保存文件不担心性能 1.选择一种Shellbash(bourneagainshell)2.找一个编辑器vi/vim3.依据语法编写命令及规则文件*.sh4.增加文件可执行权限或使用sh执行./*.shsh–x*.shShell脚本的建立 注释以#开头的句子(#!除外)表示注释,直到这一行结束变量Shell变量都由字符串组成,不需要声明,可以在程序的任意位置重新对变量赋值:赋值:变量名=值访问:$变量名或者${变量名}‘=’两端不能有空格建议注释Shell脚本基本语法—— 系统预设变量$0当前程序的执行名字$n当前程序的第n个参数值,n=1..9$*当前程序的所有参数$#当前程序的参数个数$$当前程序的PID$!执行上一个指令的PID$?执行上一个指令的返回值Shell脚本基本语法—— 数值运算bash只提供了整数运算,一般通过let和expr这两个指令来实现:例如:let“x=$x+1”或x=`expr$x+1`非整形运算可以通过bc来实现x=`echo"scale=2;(x-y)/x"|bc`在表达式中支持的操作符及其含义为:+-*/%(加,减,乘,除,取模)>><<&^|(左移,右移,位与,位异或,位或)?:(三元运算符.与C语言中的定义一致)~(取补码)!>=<=><==!=&&||(逻辑操作)=+=-=*=/=%=<<=>>=&=^=|=(二元赋值操作)一种简写:i=$((i+1))Shell脚本基本语法—— 流程控制if[[expression]]then…fi--------------------if[[expression]]then…elif[[expression]]then…else…fifor$varin[list]do…done--------------------while[condition]do…done--------------------until[condition]do…done--------------------break/continuecase$varincondition1)…;;condition2)…;;conditionn)…;;*)defaultstat;;esacShell脚本基本语法—— test命令iftestexpr;then…fi-nstr字符串str是否不为空-zstr字符串str是否为空str1=str2str1是否与str2相同str1!=str2str1是否与str2不同int1-eqint2等于int1-leint2小于等于int1-geint2大于等于int1-ltint2小于int1-gtint2大于int1-neint2不等于if[[expr]];then…fiShell脚本基本语法—— -b是否块文件-p文件是否为一个命名管道-c是否字符文件-f是否普通文件*-d是否一个目录*-s文件的长度是否不为零-e文件是否存在*-S是否为套接字文件-r文件是否可读-x文件是否可执行,则为真-w文件是否可写,则为真expr1-aexpr2如果expr1和expr2为真,则为真expr1-oexpr2如果expr1或expr2为真,则为真Shell脚本基本语法—— 定义:[function]func_name(){#dooperationon$n…}#函数外的变量是全局的#local可指定局部变量引用:func_name$param_listadd(){RET=$(($2+$1))}add101237;echo$RET函数Shell脚本基本语法—— (三)学习使用Awk语法实例 基本语法awk[-FEre][-vAssignment]{-fProgramFile|'Program'}file输入:文件/命令行模式匹配1.正则表达式+r{m,}?r{m,n}*[abcde].[^abcde]|^abcr{m}abc$开始使用awk——一个或多个前一个指定的字符0个或一个前一个指定的字符0个或多个前一个指定的字符任意一个字符或;前后两个字符串中的任意一个m个r至少m个rm到n个r,含m,nabcde中任意一个字符非abcde中任意一个字符以abc开头以abc结尾 2.关系表达式~(匹配)!~(不匹配)<(小于)>(大于)<=(小于等于)>=(大于等于)==(等于)!=(不等于)3.条件组合Ere1,Ere2指定范围(Ere1到Ere2);()将复杂的条件组合在一起;&&,||,!布尔组合4.BEGINEND模式BEGIN{}在处理所有记录前执行,可用做初始化变量END{}在处理完所有记录后执行,可用做输出处理结果开始使用awk—— 开始使用awk——变量赋值name=value特殊变量$1...$n输入记录的个字段值,$0:整个记录FILENAME当前输入文件的路径名称FNR当前文件中的当前输入记录的个数FS输入字段分隔符(单个字符或正则表达式)NF当前记录中的字段个数NR当前输入记录的个数RS输入记录分隔符(缺省值是换行字符)。OFS输出字段分隔符(缺省值是空格)。ORS输出记录分隔符(缺省值是换行字符)。 算术运算+,-,*,/,^,%,++,--,+=,-=,*=,/=,^=,%=流程控制1)if(Expression){Statement}[elseAction]2)while(Expression){Statement}3)for(Expression;Expression;Expression){Statement}4)break/continue5)for(VariableinArray){Statement}6)if(VariableinArray){Statement}开始使用awk—— 7)deleteArray[Expression]8)delete/fdelete9)exit使用函数functionfunc_name(param1[,param2]){…}调用:RET=func_name(param1[,param2])functionaverage(g,n){for(iing)sum=sum+g[i]avg=sum/nreturnavg}开始使用awk—— 内建函数1.数学函数atan2(y,x)返回y/x的反正切。cos(x)返回x的余弦;x是弧度。sin(x)返回x的正弦;x是弧度。exp(x)返回x幂函数。log(x)返回x的自然对数。2.字符串函数sub(Ere,Repl,[In])替换第一个In中与Ere匹配的字符串gsub(Ere,Repl,[In])替换所有In中与Ere匹配的字符串index(String1,String2)查询子字符串length[(String)]返回字符串长度substr(String,M,[N])返回M开始长度为N的子字符串开始使用awk—— match(String,Ere)split(String,A,[Ere])将String分割为数组元素A[n]tolower(String)转换为小写字符串toupper(String)转换为大写字符串sprintf(Format,Expr,Expr,...)格式转换,用法同c3.时间函数mktime(datespec)输入“YYYYMMDDHHMMSS”,输出秒strftime([format[,timestamp]])输入秒,返回格式字符串systime()返回当前时间eg.awk'{printstrftime("%b-%a",mktime(20050513000000))}'开始使用awk—— 输出print[ExpressionList][Redirection][Expression]ExpressionList:待输出的字符串,由变量和常量字符串组成Redirection:>,>>,|输出到文件或做为其他命令的输入Expression:Redirection的目的地址,文件名或其他命令printfFormat[,ExpressionList][Redirection][Expression]printf语句将ExpressionList参数指定的表达式以Format参数指定的格式写至标准输出,Format同c语言(除了%c)%c:当变量为数字,则输出该数字的字符编码%c:当变量为字符串,则输出该字符串的第一个字符开始使用awk—— 谢谢大家!无线产品部coonzhang(rtx:9240分机:7235) 正则表达式(regularexpression)+一个或多个前一个指定的字符r{m,}至少m个字符r?0个或一个前一个指定的字符r{m,n}m到n个字符r;含m,n*0个或多个前一个指定的字符[abcde]abcde中任意一个字符.任意一个字符[^abcde]非abcde中任意一个字符|逻辑或;前后两个字符串中任意一个^abc以字符串abc开头r{m}m个r,r是一个字符(下同)abc$以字符串abc结尾<