第十二课shell参数置换变量、控制结构与特殊命令_第1页
第十二课shell参数置换变量、控制结构与特殊命令_第2页
第十二课shell参数置换变量、控制结构与特殊命令_第3页
第十二课shell参数置换变量、控制结构与特殊命令_第4页
第十二课shell参数置换变量、控制结构与特殊命令_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十二课shell参数置换变量、控制结构与特殊命令一、shell的参数置换变量

所谓参数置换变量通常是指将含有一种变量的表达式的值赋给另一变量。也是一种为变量赋值的方式。参数置换变量的格式与功能:教材160表6-1变量2=${变量1:–字符串}变量2=${变量1:+字符串}变量2=${变量1:=字符串}变量2=${变量1:?字符串}二、shell的控制结构

与其它高级语言一样,shell也具有控制结构和其它复杂功能。1、if语句

属于shell的分支语句,if

需与fi成对出现。语法格式:一般形式:if命令列表1

then命令列表2else命令列表3(可缺省)fi每一个命令列表由一个或多个shell命令组成,每个命令之间用分号或回车分隔开

嵌套形式:

if命令列表1

then命令列表2elif

命令列表3

then

命令列表4

else

命令列表5(可缺省)

fifi教材p161例6-102、测试语句test1)test概述使用test命令:test是UNIX系统内部的一个shell命令语法:test表达式或[表达式]test命令对表达式进行测试,并设置返回值:

表达式的值为ture,则返回值为0;表达式的值为false,则返回值为非零(通常为1)。test命令能够测试的对象有:整数、字符串、文件。

test命令可以单独使用,以得到返回值。但多数情况下test命令语句用来在if和while结构中提供条件流程控制。

test命令并不会产生标准输出,只能产生返回值,可以使用echo命令显示其测试结果。例:$test“$x”–eq10

或[“$x”–eq10])$echo$?

0

特殊变量“

?”用来保存上一命令结束后的返回值。2)数值test

语法:[numberrelationnumber][“$n1”relation“$n2”]relation指关系运算符:-eq、-ne、-lt、-le、-gt、-ge如上例3)字符(串)test

语法:[“$string1”=“$string2”]

[$string1=$string2](串中无空格时)测试选择项:=、!=、-z、-n例:$X=3

$Y=03$[“$X”-eq“$Y”]shell将参数视为数字$echo$?0$[“$X”=“$Y”]shell将参数视为字符串$echo$?14)文件test

(教材p163test的参数表及功能)

语法:test-选择项文件名5)测试语句的组合

测试语句可以单独使用,也可以通过逻辑符号组合使用。组合测试语句的逻辑符号:

!逻辑非(NOT)

-a

逻辑与(AND)

-o

逻辑或(OR)

()括起逻辑表达式,提高其优先级。注意左右括号之前均需转义字符\教材P164例6-11测试语句应用6)特殊条件测试shell的if和循环语句中还有三个特殊条件测试语句:

:

表示不做任何事情,退出值为0

ture

表示总为真,退出值0

false

表示总为假,退出值2553、case语句

属于shell的分支语句,case需与esac成对出现。case结构提供了实现多路分支的更便捷的方法case分支结构顺序地将一个字符串与各正则表达式(参数)进行比较,这些比较是严格的基于字符串的比较。一般语法格式:

casewordinpattern1)listA正则表达式1)命令列表

;;

pattern2)listB

;;……patternN)listN

;;

esac

字符串word会与每一个pattern(正则表达式)比较命令的返回值

pattern允许的特殊字符:*、?、[…]、|(OR,隔开pattern中的各个模式)case的退出值(返回值)是整个结构中最后执行的那个命令的退出值。若没有执行任何命令,则case的退出值为0。教材p165例4、while语句属于shell的循环语句,关键词do与done需要成对出现,包围循环体。语法:while

listA

循环控制命令列表(常用test语句作为测试条件)

dolistB

命令列表

done

当循环控制命令的返回值为真时,就执行循环体中的命令。因此,应该尽力避免该返回值永远为真的无穷循环(可能会造成难以弥补的损失)。

while循环结构举例:例1:ans=yes

while[“$ans”=yes]

doecho“Enteraname”

readnameecho$name>>

echo“Continue?(Enteryesorno)–>\c”readans

done

例2:while(($#!=0))doiftest–d$1

thenechocontentsof$1:ls-F$1fishiftechoThereare$#items

echoleftonthecmdline

done

注:若希望循环至少执行一次,就需要事先进行一些设置。如例1中:ans=yes

教材p166例5、until语句

shell中的循环语句,关键词do与done需要成对出现,包围循环体。语法:untillistA

循环控制命令列表(常用test语句作为测试条件)

dolistB

命令列表done当循环控制命令的返回值为假时,就执行循环体中的命令。until语句会持续执行listB中的命令直到listA中最后一条命令的返回值为真。同样也应该避免until循环的无穷执行

until循环结构举例:

例1:ans=yesuntil[“$ans”=no]doecho“Enteraname”

readnameecho$name>>echo“Continue?(Enteryesorno)–>\c”readans

done例2:until(($#==0))doiftest–d$1……done

教材p167例

6、for语句

shell中的循环语句,关键词do与done需成对出现,包围循环体。句法:forvarinlist(var为变量;list为命令列表)

do

listA

(命令列表)

done

功能:循环体的执行次数取决于list列表中的条目数量。for语句将每一个条目对应的值赋给var,并执行一次循环,for语句的三种使用格式(list的三种格式):1)list为值表(字符串列表)

var依次取list中字符串的值教材p1672)list为文件正则表达式如:m*.cvar依次取list匹配的文件名教材p1683)list由命令行参数产生var依次取命令行位置参数被赋予的值例:foriin$*(或:fori)docp$i$HOME/backups

donefor结构是一种非常灵活的循环结构,能够让循环贯穿任何能产生的列表。如果要求多次存取相同的列表,可将列表存储到一个文件中。然后使用cat命令为for循环产生列表。

例:$catstudentsuser1user2…usern$catfffforNAMEin$(catstudents)

docpkkk/home/$NAMEchown$NAME/home/$NAME/kkkechodone$NAMEdone教材p16

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论