ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:31.38KB ,
资源ID:8270474      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8270474.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Korn shell和高级shell编程.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Korn shell和高级shell编程.docx

1、Korn shell和高级shell编程Huawei Technologies Co. Ltd.华为技术有限公司Confidentiality level密级Total 11 pages共11页Korn shell和高级shell编程Prepared by 拟制陈刚Date日期2004-03-23Reviewed by 评审人Date日期yyyy-mm-ddApproved by批准Date日期yyyy-mm-ddAuthorized by签发Date日期yyyy-mm-ddHuawei Technologies Co., Ltd. 华为技术有限公司All rights reserved版权所

2、有 XXKorn shell和高级shell编程1. Korn shell基础1. 启动文件Korn shell的启动文件/etc/profile和.profile(在用户的宿主目录中)中保存这用户的环境变量.2. 符号命令内置命令用法()子shell$()命令替换()赋值运算符(当被包围的值中包含一个等号时才使用)$()表达式求值(不与被包围的等号一起使用)test 命令与类似,但是加入了字符串比较功能3. 变量变量赋值VARIABLE=value可以使用内置命令unsed(sh,csh,ksh)来取消一个或多个变量的设置:unset PREF SUFF注: 使用命令 man shell_b

3、uiltins可以看到ksh(和其他)内置命令的列表.使用命令 man ksh可以查看整个ksh的帮助文档.4. 变量的属性内置命令typeset(ksh)就是用来设置变量属性的.-u 将变量值中所有字母全部转换为大写字母.例如:$ typeset u NAME$ NAME=”Barbara Jackson”$ echo $NAMEBARBARA JACKSON-i 具有整形属性的变量.integer内置命令(ksh)与typeset i几乎相同.语法: typeset ibase variable其中,base表示进制的基数,如果基数不是10,变量的值就表示成base#value例如:$ C

4、OUNT=20$ typeset i2 BCOUNT$ BCOUNT=$COUNT$ echo $COUNT $BCOUNT20 2#10100-x 具有export属性,这个属性与内置命令export(sh,ksh)相似,如果一个变量具有这个属性,那么此变量的副本就可以被所有的子进程继承.Korn shell支持内置命令export,也提供typeset x来设置export的属性.用户可以象给变量设置属性一样给函数社子export属性,具有export属性的函数在所有的子shell中都是可用的. 格式化属性:选项作用-Lwidth在width宽度之内左对齐-Rwidth在width宽度之内

5、右对齐-Zwidth在width宽度之内右对齐,变量如果是数字,则前面用0填充.注:如果用户忽略了width,那么ksh将是使用赋给这个变量的第一个值的宽度.例如: $ typeset L8 FRUIT1 FRUIT2$ FRUIT1=apple$ FRUIT2=watermelon$ echo $FRUIT1$FRUIT2apple watermel$ echo $FRUIT2$FRUIT1watermelapple$ typeset Z2 DAY$ DAY=2; echo $DAY02$ typeset L MONTH$ MONTH=11; echo $MONTH/$DAY/9711/02

6、/97$ MONTH=8; echo $MONTH/$DAY/978 /02/97-r readonly属性,具有readonly属性的变量的值不能被改变.用户在给变量设置readonly属性的同事或者设置readonly之前,要先给这些变量赋值.例如:$ PATH=/usr/ucb:/usr/bin:/usr/local/bin:/usr/games$ typeset r PATH FPATHusrlocalfuncs$ PATH=/usr/bin:/usr/ucb:/usr/local/bin:/usr/gamesksh: PATH: is read only注: 用户可以使用内置命令 r

7、eadonly (sh,ksh)来代替typeset r.$ readonly PATH FPATH=/usr/local/funcs不带有任何参数的typeset可以列出变量和变量的属性.例如:$ typeset | grep DAYzerofill 2 rightjust 2 DAY 使用带有某个选项的typeset来看哪一个变量具有某一个特定的属性:$ typeset -ZDAY=025. 局部变量内置命令typeset的用法之一就是为函数声明一个局部变量.typeset varname6. 关键字变量当用户启动一个会话时,Korn shell自动定义并继承一些变量.这些变量包括来自sh

8、和ksh中的大部分shell关键字变量.变量作用# (sh,ksh)命令行参数的数目* (sh,ksh)所有命令行参数作为一个参数 (sh,ksh)所有的命令行参数,每个都作为独立的参数_ (下划线(ksh)在shell当前的情况下,前面简单命令中的最后一个参数.$ cat file1 file2 file3 all3files# echo $_file3CDPATH (sh,ksh)搜寻路径的绝对路径名列表FCEDIT (ksh)内置命令fc使用的编辑器的名称FPATH或fpath (ksh)包含shell函数的文件列表HISTFILE (ksh)保存用户历列表的文件名HISTFILESIZ

9、E (ksh)保存用户HISTFILE中的历史列表的行数HOME (sh, ksh)用户主目录的路径名IFS (sh,ksh)内部字段的分隔符LINENO (ksh)在ksh执行脚本或函数的命令之前,先把ksh将要执行的命令的函数赋值给LINENO.MAIL (sh,ksh)保存用户邮件的文件OPTARG和OPTIND (sh,ksh)这些变量由内置命令getopts设置PATH (sh,csh,ksh)shell查找命令的目录列表PPID (ksh)父进程中PID的值PS1 (sh,ksh)shell的提示字符串PS2 (sh,ksh)shell的辅助提示字符串LINES和COLUMNS及P

10、S3 (ksh)控制哪些使用select命令的shell脚本所产生的输出格式.PS4 (ksh)在调试模式下使用的提示字符串.PS4的缺省值是+.OLDPWD和PWDshell在PWD (sh,csh,ksh)中保存了最近一次由cd命令设置的当前工作目录的绝对路径名.而在OLDPWD (ksh)中保存了前一个工作目录的路径名.RANDOM (ksh)每次使用此变量,都会给这个变量赋值一个032767之间的随即整型值.SECONDS (ksh)从这个shell会话启动时计算所过去的的时间秒数.TMOUT如果设置了该变量,则在没有输入的情况下经过TMOUT变量所执行的秒数之后,shell退出.这个

11、变量经常在一个全局的启动文件中设置为只读.7. 扩展shell变量(1) 字符串模式匹配这些运算符可以从字符串中删除具备匹配模式的前缀或后缀.字符串运算符含义#删除最小的匹配前缀#删除最大的匹配前缀%删除最小的匹配后缀%删除最大的匹配后缀这些运算符的语法为:$arname op pattern在上面的语法中,op时表格中所列出的运算符之一,而pattern是与用于生成文件名的匹配模式相类似的匹配模式.例如:$ SOURCEFILE=/usr/local/src/prog.c$ echo $SOURCEFILE#/*/local/src/prog.c$ echo $SOURCEFILE#/*/p

12、rog.c$ echo $SOURCEFILE%/*/usr/local/src$ echo $SOURCEFILE%/*$ echo $SOURCEFILE%.c/usr/local/src/prog$ CHOPFIRST=$SOURCEFILE#/*/$ echo $CHOPFIRSTlocal/src/prog.c$ NEXT=$CHOPFIRST%/*$ echo $NEXTlocal8. 数组变量Korn shell支持一维数组变量.下标是以0开始的整数.用户可以使用内置命令set将一个数组的值赋给一个变量,如下所示:set A name element element2 .例如:$

13、 set A NAME alex helen jenny scott$ echo $NAMEalex$ echo $NAME2jenny用户可以使用一个星号来显示数组的所有元素:$ echo $NAME*alex helen jenny scott另外,还有一些特殊的, 非整数的下标.下标*和都是用来提取整个数组的内容的,但是当它们在引号中使用时其行为是不同的.使用可生成一个数组,这个数组是原始数组的副本;而使用*,则生成的仅仅是具有单一元素的数组(或者是一个普通变量),这个元素是由使用IFS的第一个字符(通常是一个空格)分隔开的原始数组的所有元素构成.例如:$ set A A “$NAME*

14、”$ set A B “$NAME”$ set | head -5A=alex helen jenny scottB0=alexB1=helenB2=jennyB3=scott用户可以在赋值语句的左侧使用下标来替换数组中指定的元素的值$ NAME4=william$ echo $NAME*alex helen jenny scott william9. 算术(1) 赋值使用ksh内置命令let赋值例如:$ let “VALUE=VALUE*10+NEW”在这个例子中,变量VALUE和NEW应该是整数值.在let语句中,美元符号($)不需要加载变量名之前.双引号把参数括起来以避免shell将星号

15、当作文件模式匹配运算符-含有空格的参数也必须用引号括起来.Korn shell接受(expression)作为let “expression”的同义词,以避免引号的转义. 例如: $ (VALUE=VALUE*10+NEW) let的每一个参数都作为一个独立的表达式来进行赋值,所以可以在一行中同时给不只一个变量赋值: $ let COUNT=COUNT+1 “VALUE=VALUE*10+NEW” (2) 表达式可以象使用命令参数一样使用算术表达式,将其包围在$(和)中代替任意的数字值.$ echo “There are $(60*60*24*365) seconds in a non-lea

16、p year.”There are 31536000 seconds in a non-leap year.不需要将$(expression)包含在引号中,因为Korn shell在$(和)中不执行文件名扩展功能.这个特性使得很容易使用一个星号来完成乘法.注:$()双括号内部的独立变量前的美元符号是可选项.$ x=23$ y=37$ echo $(2*x+3*y)157$ echo $(2*$x+3*$y)157(3) 运算符下表是Korn shell中可以在算术表达式中使用的运算符.运算符含义+单目”加”-单目”减”!逻辑”非”求补&按位”与”按位”异或”|按位”或”*乘/除%求余+加-减右

17、移大于=大于等于=等于!=不等于&逻辑 “与”|逻辑 “或”= += -= *= /= %= = |= 赋值& 和 |被称为短路运算符(short circuiting).如果使用这两个运算符之一的结果可以通过左边的操作数决定的话,那么右边的操作数就可以不用考虑了.例如:$ (N=10)$ (Z=0)$ echo $( N | (Z+=1) )1$ echo $Z010. 内置命令控制过程流的Korn shell控制结构是ifthen , forin, while, case ,until, repeat和select.if , while及until控制结构与test-command(不是t

18、est内置命令(sh,ksh)用法相同.可以使用test内置命令, (两个方括号)内置命令以及类似test-command的其它命令. 其中,内置命令的语法规则为: conditions 执行该内置命令的结果类似于test内置命令,是一个返回状态.括号内允许的conditions基本是一个test命令能接受的扩展集.test内置命令使用-a和-o选项,Korn shell将使用& 和|.可以随使用test的数字关系运算符-gt,-ge,-lt,-le,-eq和-ne.Korn shell允许使用算术表达式,而不仅仅局限于常数作为操作数.例如:$ $( $#HOME + 14 ) lt $#PW

19、D $ echo $?1注:Korn shell也允许算术测试,给测试出现在双圆括号()中,而不是方括号,双圆括号前不使用美元$符号,同事测试的结果不是数字值,返回值只是true或者false.例如:if $( $#HOME + 14 ) lt $#PWD then 或者if ( $( $#HOME + 14 ) $#PWD )then或者if ( $#HOME + 14 $#PWD )then以上最后一个版本使用类似算术运算符的比较运算符,使用起来比较自然.11. 输入与输出(1) 使用read命令接受输入语法规则:read -prs -un varname?prompt varname注:

20、变量名为可选项.例如:$ read MON?”Enter month,day and year separated by spaces:” DAY YREnter month,day and year separated by spaces:如果用户输入三个值,它们被赋值给MON,DAY,和YR,问号(?)用户避免Korn shell将它作为文件名模式匹配运算符.read 命令的其它选项:选项作用-pcoprocess命令read p 将从协同进程(coprocess)的标准输出中读入输入行-rraw input 通常如果输入行以一个反斜杠()结束,则反斜杠()与其紧随其后的NEWLINE将被

21、省略.该选项将导致结尾的反斜杠作为一个普通的字符.该选项的一种应用是用于读取某个输入文件,该输入文件本身作为一个包含用户所希望复制的反斜杠的shell脚本.-ssave 将输入作为命令行存入history文件中-un使用整数n作为文件描述符,read从该文件读入数据read u4 arg1 arg2等效于read arg1 arg2 &4如果read内置命令成功读取任何数据,则它的退出状态值为0,当它读到EOF(文件结束)时,它将具有非零退出状态值.例如:$ exec 3 name$ read u3 line1; print $line1; read u3 line2; print $line

22、2Alice jonesRebort smith$ exec 3或者1重定向标准输出,使用符号2重定向标准错误.使用exec内置命令打开文件:$ exec 3 outfile$ exec 4 infile记号&同时复制输入文件和输出文件的文件描述符.用户可以通过以文件描述符指同一个文件作为其它的打开文件描述符来复制一个文件描述符.例如,标准输入和标准输出下面的命令打开或者重定向文件描述府n作为文件描述符m的一个副本:exec n&n将标准输出重定向到一个文件描述符,或者用&n将标准输入重定向到一个文件描述符.通过下面的命令关闭这个文件:exec n&-13. 函数function内置命令(ks

23、h)列出所有定义的函数.unfunction内置命令(ksh)可删除对一个函数的定义.可以将函数存储于文件中,当函数第一次调用时则加载到内存.命令autoload内置命令(ksh)可提示ksh某个函数保存在一个文件中.当执行函数autoload(通常在用户开始一个新的shell时),shell不会将函数加载到内存-它只是跟踪函数的民称(实际上它将函数看作一个未定义的函数).当一个脚本第一次调用一个autoload函数,ksh根据列表于FPATH中的路径搜索与函数名相同的文件.当它找到指定文件,它将这个文件加载到内存,同时将这个文件在内存中驻留.函数autoload的语法规则是:autoload

24、 func_name需要确保函数定义名与文件存储名为相同的民称.通常用户需要有一个包含许多小文件的目录,其中每个文件包含一个单一函数的定义.如果用户在使用不同shell函数的多个工程减的工作,则用户必须有一些这样的路径.14. 命令处理Korn shell执行以下的基本步骤,按照下表中的顺序来处理一条命令:命令顺序含义记号分隔即将输入字符流分隔为单词,并识别I/O重定向运算符别名替换识别别名和扩展别名文件名扩展用它们的扩展值替换以开头的单词参数扩展扩展所有未被引号括起来的变量表达式命令替换确定在符号()或命令替换符号($()中的命令,并且以命令的标准输出替换命令算术扩展用算术表达式结果值代替算术表达式文件名生成将包含文件匹配模式的路径名替换为路径名扩展列表引号处理从命令行中删除大多数引号重定向重定向标准输出/标准输入/标准错误和其它文件描述符执行命令行执行结果命令行2. sed基础

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1