Unix Shell 编程基础培训(基础篇)

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

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

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

资源描述

编程基础篇北京神州数码思特奇信息技术股份有限公司研究院课程目标•熟练编写UnixShell程序内容提纲1.Shell介绍2.Shell脚本介绍3.Shell特性4.正则表达式5.变量与运算符6.Shell的输入与输出7.Shell函数8.脚本调试9.高级编程技巧10.Shell工具SHELL介绍Shell-UNIX命令解释器问题引入:DOS系统的命令由command负责执行,并且对重覆性或多个命令运行可写成批处理文件,只要执行这个批处理文件就等於执行这些命令。UNIX系统如何处理?Shell:shell是一种命令语言,同时又是一种程序设计语言。UNIX系统利用shell命令解释器(command-languageinterpreter),完成用户输入命令的执行,是用户与系统交互的界面,是命令与kernel之间的接口。shell接收用户输入的命令,对命令作出解释,然后发送给kernel执行之。shell是一个解释型的程序设计语言。shell程序(脚本)相当于dos的批处理文件,可简单到只有一条命令,也可以包括循环、条件语句、数学运算、控制结构的程序,完成复杂的管理任务。Shell-UNIX命令解释器SHELL脚本介绍Shell脚本介绍•为什么使用Shell脚本?–批量命令–重复、条件等控制•Shell脚本的基本内容#!/bin/sh第一行注释:#第二行变量第三行条件判断、循环第四行•脚本的运行方式–chmod?+x脚本–./脚本文件名Shell脚本介绍•示例:hello.sh#!/bin/bash#这是一个基本的shell脚本op=helloworldecho$opSHELL特性Shell特性•别名•命令替换•管道•重定向•后台处理•模式匹配•变量•特殊字符别名•aliasEg:aliasll=`ls-alh`命令替换•myfile的内容如下:–marm–findfile实现替换如下:ls`catmyfile`-al命令替换示例:$MYDIR=`dirname/usr/local/share/doc/foo/foo.txt`$echo$MYDIR/usr/local/share/doc/foo上面所做的称为“命令替换”。此例中有几点需要指出。在第一行,简单地将要执行的命令以反引号括起。那不是标准的单引号,而是键盘中通常位于Tab键之上的单引号。可以用bash备用命令替换语法来做同样的事:$MYDIR=$(dirname/usr/local/share/doc/foo/foo.txt)$echo$MYDIR/usr/local/share/doc/foo如您所见,bash提供多种方法来执行完全一样的操作。使用命令替换可以将任何命令或命令管道放在``或$()之间,并将其分配给环境变量。真方便!下面是一个例子,演示如何在命令替换中使用管道:MYFILES=$(ls/etc|greppa)bash-2.03$echo$MYFILESpam.dpasswd后台处理•什么是后台?•一个终端可以同时运行多个程序•用法:–nohupcommand&可以再后台运行此命令示例:nohubtar-czf要压缩的文件名压缩后的文件名&查看后台命令使用:jobs–l变量•示例:#!/bin/bash#这是一个基本的shell脚本printchar=“helloworld”echo$printchar•变量用来存储信息管道(|)•把一个命令的输出连接到另一个命令的输入。•示例:–ls|sort–catfunc.txt|grep-v^#重定向()•与管道相关,可以改变程序运行的输入来源和输出地点•示例:–sortmyfile.txt对文件中内容进行排序–sortmyfile.txtmyfile_test.txt模式匹配•显示以txt为扩展名的文件或显示以a开头的文件,这种情况称为模式匹配。•实现方式:正则表达式如:ls*.txt特殊字符•分号(;):允许在一行上放多个命令。–eg:cd~/backup;mkdirstartup;cp~/.*startup/.•&:命令后执行。•括号():创建成组的命令。•竖杆(|):管道标示符。•&:表示重定向。•*?[]!:表示模式匹配。•$:变量名的开头。•#:表示注释(第一行除外)。•空格,制表符,换行符:当做空白。•$((...)):对括号内的表达式求值–eg:#!/bin/shx=0while[$x-ne10];doecho$xx=$(($x+1))doneexit0特殊字符•**:两个星号在运算时代表次方的意思–eg:sus=2**3–echosus=$sus–$sus=8•{}大括号:–用法一:通配符扩展–eg:lsmy_{finger,toe}s–这条命令相当于如下命令的组合:–lsmy_fingersmy_toes–eg:mkdir{userA,userB,userC}-{home,bin,data}–用法二:可用于语句块的构造。•'string'单引号和string双引号–双引号:如果想在定义的变量中加入空格,就必须使用单引号或双引号,–单、双引号的区别在于双引号转义特殊字符而单引号不转义特殊字符–eg:$heyyou=home–$echo'$heyyou'–$$heyyou($没有转义)–eg:$heyyou=home–$echo$heyyou–$home($转义了输出了heyyou变量的值)特殊字符•单引号:–由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释。例如:•单引号:–由双引号括起来的字符,除$,\,'和这几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通字符对待。[root@localhost/]#String=$PATH\\\\$PATH[root@localhost/]#echo$String/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:\$PATH特殊字符•双引号(“):用来使shell无法认出空格、制表符和其他大多数特殊字符,这样“DavidMedinets”表示一个值。–让$反斜杠反引号不失效•单引号(‘):用来使shell无法认出所有特殊字符。•反引号(`):用来替换命令。•反斜杠(\):用来使shell无法认出以上的特殊字符,使其后的特殊字符失去特殊含义。–如:David\Medinets–[root@sky/root]#touchDavid\Medinets–[root@sky/root]#lsDavid\medinets–放在指令前,有取消aliases(别名)的作用;放在特殊符号前,则该特殊符号的作用消失;放在指令的最末端,表示指令连接下一行(使得回车符无效,只起换行作用)正则表达式模式匹配:正则表达式正则表达式在shell、工具程序、Perl语言中有非常重要的地位。正则表达式通过一些特殊符号表示特定的字符串模式。常见的特殊字符包括:字符功能^置于待搜索的字符串之前,匹配行首的字$置于待搜索的字符串之后,匹配行末的字\匹配一个字的字头\匹配一个字的字尾.匹配任意单个正文字符[str]匹配字符串str中的任意单个字符[^str]匹配不在字符串str中的任意单个字符[a-c]匹配从a到c之间的任一字符*匹配前一个字符的0次或多次出现\忽略特殊字符的特殊含义,将其看作普通字符模式匹配:正则表达式扩充的特殊字符:字符功能+重复匹配前一项1次以上?重复匹配前一项0次或1次{j}重复匹配前一项j次{j,}重复匹配前一项j次以上{,k}重复匹配前一项最多k次{j,k}重复匹配前一项j到k次s|t匹配s或t中的一项(exp)将表达式exp作为单项处理基本元字符集元字符含义^只匹配行首$只匹配行尾*匹配0或多个字符[]匹配[]内字符\屏蔽元字符的特殊含义.匹配任意单字符模式\{n\}匹配模式出现次数,n模式\{n,\}m模式次数,至少为n模式\{n,m\}模式出现在n,m之间模式匹配:正则表达式匹配行首/行尾•行首:^•行尾:$•举例–查找当前目录下面所有子目录•ls–l|grep“^d”–查找文本文件中,以a开头的行•morea.txt|grep“^a”–查找文本文件中,以a结尾的行•morea.txt|grep“a$”–查找文本文件中,所有的空行•morea.txt|grep“^$”模式匹配:正则表达式匹配单个字符•模式:•举例–..abc..可以匹配12abc34,ababc43等模式匹配:正则表达式匹配0或多个字符•模式:*•举例–abc12*可以匹配如下•abc123•abc14248876•abc11abc•……模式匹配:正则表达式匹配单词•模式:\\•功能:匹配完整的单词•举例–\[dD]ay\模式匹配:正则表达式屏蔽特殊字符•功能:将字符串中的特殊字符去掉特殊意义•特殊字符–$.‘“*[]^|()\+?•举例–匹配包含.字符的行:\.–匹配包含$的行:\$–匹配包含\的行:\\模式匹配:正则表达式匹配范围•功能:匹配特定的字符串或字符串集•举例–[0123456789]或[0-9]:匹配任意数字–[A-Za-z]:匹配任意字母–a[a-zA-Z]t:a开始+任意字母+t–[hH]ello:匹配Hello或者hello–[^0-9]:匹配任一个非数字字符–[^a-zA-Z]:匹配任一个非字母字符模式匹配:正则表达式匹配模式结果出现次数•pattern\{n\}–匹配模式出现n次。•pattern\{n,\}–匹配模式出现最少n次。•pattern\{n,m\}–匹配模式出现n到m次之间,n,m为0-255中任意整数。模式匹配:正则表达式举例•A\{2\}B–AAB•A\{4,\}B–AAAAB,AAAAAB,AAAAAAB……•A\{2,4\}B–AAB,AAAB,AAAAB模式匹配:正则表达式练习•从如下文本中,选出日期格式符合yyyy.mm.dd的行–2006-05-1713910591921chenyq–2006071113301131125suwn–2006.07.1913123451231aaa–2005/11/2513611258734bbb•过滤模式:[0-9]\{4\}\.[0-9]\{2\}\.[0-9]\{2\}模式匹配:正则表达式变量与表达式变量与运算符•本地变量•环境变量•变量替换•位置变量•标准变量•特殊变量•影响变量的命令•引号•运算符•表达式替换•运算符优先级变量•什么是shell变量•本地变量•环境变量•变量替换•位置变量•标准变量•特殊变量•影响变量的命令本地变量•本地变量在用户现在的shell生命期的脚本中存在使用。•variable-name=value设置变量及值•set显示本地所有的变量•readonlyvariable-name变量只读–设置后不能在设置回来了。本地变量(续)•[root@jack/root]#LOCALTEST=“test”•[root@jack/root]#echo${LOCALTEST}Test•[root@jack/root]#readonlyLOCALTEST•[root@jack/root]#LOCALTEST=“test1”•Bash:LOCALTEST:readonlyvariable•[root@jack/root]#readonly[-p]查看当前设置的本地变量–Declare–rLOCALTEST=“test”–Declare–irUID=“0”示例:环境变量•用于所有用户进程(称为子进程)。登录进程称为父进程。Shell中执行的用户进程均称为子进程。不像本地变量(只用于当前的shell),环境变量可用于所有子进程,包括编辑器、脚本和各种

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

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

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

×
保存成功