Shell编程2.1.ppt_第1页
Shell编程2.1.ppt_第2页
Shell编程2.1.ppt_第3页
Shell编程2.1.ppt_第4页
Shell编程2.1.ppt_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

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

文档简介

1、第5章 shell编程,1 shell概述 2 shell变量 3 shell的特殊字符 4 shell的控制结构 5 shell应用实例 6 小结 习题,shell是一种命令语言,同时又是一种程序设计语言。 shell的语言处理能力,使得用户能够方便地定义各种变量、参数,并使用各种控制语句编写复杂的命令程序完成多种工作。 本课介绍shell、shell程序设计语言、shell的运行环境及shell程序的实例。,1 shell概述 1.1 什么是shell shell是一种命令解释程序(命令解释器),shell解释用户输入的命令行,提交系统内核处理,并将结果返回给用户。与Linux命令一样都是

2、实用程序,但两者又有区别。一旦用户注册到系统后,shell就被系统装入内存,并一直运行到用户退出系统之止;而一般命令仅当被调用时,才由系统装入内存执行。 shell本身也是一种可编程的程序设计语言。用shell写的程序(shell脚本)相当于dos/windows下的批处理文件,它可以简单到只有一条命令,也可以复杂到包括大量循环、条件语句、数学运算、控制结构,也可以是介于两者之间的程序。,1.2 shell程序语言的特点 shell允许通过编程来完成复杂的功能处理,但其作为语言与高级语言相比较具有不同的特点: (1) shell是解释性的,多数高级语言是编译性的; (2) shell语言与高级

3、语言处理的对象不同; (3) shell与系统有密切的关系; (4) shell易编写、调试、灵活性较强,但速度低; (5) shell作为命令级语言,命令组合功能很强。,1.3 bash的特点 shell有两种主要语法类型: Bourne shell和C shell,彼此不兼容。Bourne shell家族:sh ksh bash psh zsh;C shell家族:csh tcsh。 其中bash和 zsh在不同程度上支持 csh 的语法。 这里,我们再着重介绍一下bash的特点: (1) 自动补全功能 假设要输入的命令很长,或者命令后面要给的文件名很长。这个时候只要按一个Tab键,bas

4、h就会在可能的命令或文件名里面找寻匹配的命令,找到的话就会自动帮你补齐。,(2) 命令行编辑程序 bash的命令行编辑是在提示符下,可对未执行的命令字符任意地修改。 (3) 命令历史(command history) 所谓的命令历史就是把曾经输入过的命令记录起来,方便日后的查询与使用。只要按向上键就可以调出前一个命令,再按一次向上键就可以调出更前一个命令,依此类推,用向下键可以回到下个命令,所以用上、下键就可以选择以前输入过的命令。,Shell编程注意事项,命令的执行是从上而下,从左而右地分析与执行。 空白行忽略 读取一个Enter,就尝试开始执行该行命令。 “”表注释,1.4 Shell程序

5、的创建与执行,用任一文本编辑器创建shell文件 (xxx)(例如: gedit xxx或vi xxx) 将shell文件改为可执行文件(例如:$chmod u+x xxx) 执行shell文件(例如:$./ xxx),1.5 Shell程序示例,例一、一个简单的shell程序 #vi first.sh #!/bin/bash # a simple shell script example #a fuction Function say_hello( ) Echo “enter your name ,please.:” Read name Echo “hello $name” Echo “pr

6、ogram starts here” Say_hello Echo “program ends” #chmod +x first.sh #./first.sh,2 shell变量 2.1 shell变量描述 shell实际上是基于字符串的程序设计语言,但也有变量。shell变量能够而且只能存储正文字符串,即它只有一种类型的变量即串变量。但从赋值的形式上看,则可以分成四种类型的变量或变量形式。变量的名字必须以字母或下划线开头,可以包括字母、数字和下划线。 2.2 用户自定义变量 取消变量unset name 用户自定义变量语法格式:name=string,赋值号“=”两边不允许有空白符。 例:,

7、nodehost=beijing.UUCP path=/bin:/usr/bin:/etc/bin count=10 允许多个赋值操作,按从右到左的顺序进行。 例: #A=B B=abc C=OK # echo A B C abc abc OK 当引用一个未设置的变量时,其隐含值为空。 例: # echo mail is path of mailbox is path of mailbox,如果用双引号“”将值括起来,则括起来的字符串允许出现空格、制表符和换行符等特殊字符,而且允许有变量替换。 例1:# MAIL=/var/mail/fk # var=MAIL is path of mailb

8、ox # echo var /var/mail/fk is path of mailbox 例2: # str=This is n a book # echo str This is a book,如果用单引号将值括起来,则括起来的字符串允许出现空格、制表符和换行符的特殊字符,但不允许有变量替换。 例3: # BOOK=English book # MSG=BOOK # echo MSG BOOK 例4: # msg= Today is Sunday # echo msg Today is Sunday,引用变量的值时,可以用花括号将变量名称括起来,使变量名称与它的后续字符分隔开,如果紧跟在变

9、量名称后面的字符是字母、数字或下划线时,必须要使用花括号。 例5: # str=This is a string # echo strent test of variables This is a stringent test of variables # echo strent test of variables test of variables,变量键盘读取、数组与声明:read,array,declare,read要读取键盘输入的变量 Read pt variable 让用户从键盘输入内容,赋值给变量atest read atest Echo $atest declare/typese

10、t-声明变量类型 -a 定义变量的类型为数组类型 -i变量定义为整型数字类型(integer) -x等价于export,将变量定义为环境变量 -r将变量设置为readonly类型(该变量不可被更改内容,也不能重设)。 Varindex=content,变量内容的删除,案例: Path$PATH echo $path 例子1:删除kerberosecho $path #/*kerberos/bin: 例子2:删除前面所有的目录,仅保留最后一个目录 echo $path# /*: 例子3:从右向左删除 echo $path /*:,命令别名,命令别名设置:alias ,unalias 例如:ali

11、as lm=ls l more unalias lm 去掉别名lm,命令执行的判断依据:;,sync;shutdown h now $?(命令传回码)与 !=:不等于则为真; 例1: 两个字符串进行比较 user=smith test user= smith echo ? 0 test user = tom echo ? 1,例2: 带有空格的字符串比较 month=January test month = January echo ? 1 test month = January echo ? 0 注意: shell在处理变量时,遇到有双引号将保留其内容,而省略双引号时,将滤去空格。,例3:

12、 带有空格的字符串比较 a=testing string test a = testing string echo ? 0 test a = testing string test: unknown operator string shell处理变量 a 时,将其进行变量替换,然后将结果(testing string)传递给test,而test将string作为操作符来处理,因此出错。,3. 使用test测试字符串时要注意的问题 (1) 向test 传递的各自变量之间必须有空白字符,如果“=”与任一自变量之间没有空白字符就会产生错误。 (2) 在使用变量的值替换的自变量上,用双引号括起来十分必

13、要,以保证test在变量的值为空时也能接收到该自变量,这是一种良好的shell程序设计风格。 (3) 在test命令的测试中,空格和引号是shell程序设计中经常发生错误的焦点,要特别引起注意。 (4) test命令对它的自变量非常讲究,在比较的串中出现运算符时,要考虑到运算符优先级的问题。,4. test命令可用于整数比较 首先要搞清楚整数比较的两个概念: shell并不区分放在shell变量中的值的类型,就变量本身而言,它存放的仅仅是一组字符串,即shell只有一种类型的变量串变量;当使用整数比较操作符时,是test命令来解释存放在变量中的整数值,而不是shell。 命令格式为, test

14、 整数测试表达式 -eq 相等 -ge 大于等于 -le 小于等于 -ne 不等于 -gt 大于 -lt 小于,例1: x1= 005 x2= 10 test x1 = 5 /作为字符串比较 echo ? 1 例2: test x1 -eq 5 echo ? 0 例3: test x2 -eq 10 echo ? 0,5. test用于文件的测试 test可用于文件各种特性的检查。这些文件的操作符自然是一原操作符,意味着它们要求其后跟随一个自变量。在所有的情况中,这个自变量是一个文件或目录名。常用的文件测试表达式示例如下: -d 文件名:文件存在且为目录返回值为“是” -f文件名:文件存在且为

15、普通文件返回值为“是” -L文件名:文件存在且为符号连接返回值为“是” -r文件名:文件存在且可读则返回值为“是” -s文件名:存在且长度非零则返回值为“是” -w文件名:存在且可写则返回值为“是” -x文件名:存在且可执行则返回值为“是”,例1: 检查指定的文件是否存在并且可读 test -r /usr/fk/message 例2: 检查指定的文件是否为目录 test -d /usr/src/local/sendmail 例3: 检查指定的出错文件是否为空,如不空则列出该文件的内容 test -s errfile ; pattern2) command . command; . patter

16、nn) command . command; esac,#!/bin/bash If test $# =3 Then Case $2 in +) let z=$1+S3; -) let z=$1-$3; /) let z=$1/$3; X/x) let z=$1*$3; Esac Echo “answer is $z” Else echo “usage - $0 value1 operator value2” fi,4.4 for结构 格式为, for variable in arg1 arg2 . argn do command . command done,例:循环5次显示字符串 #!/b

17、in/bash For i in 1 2 3 4 5 Do Echo “welcome $i times” Done for( (初始值;终止循环条件;循环自变量修改) do 循环体 done,4.5 while结构 格式为, while command do command . command done,#!/bin/bash i=1 While $i le 10 Do Echo “number=expr $i * 10;” i=expr $i + 1 done,4.6 until结构 格式为, until command do command . command done,4.7 循环体中

18、其他命令 1. break命令 格式为, break或break n break是shell的内部命令,用于在循环体中根据命令运行的返回条件,直接终止循环体内命令的执行。当执行break命令时,控制流从循环体中转移到done之后的第一条命令上。当执行break n命令时,则终止最内层的n个循环的执行。 2. continue 命令 格式为, continue或continue n,continue是shell的内部命令,用于在循环体中根据命令运行的返回条件,直接进入下一次循环命令的执行。当执行continue命令时,控制流直接转到本循环体中第一条命令上。当执行continue n命令时,则跳过

19、最里层的 n次循环体的执行,即开始第n个(从内向外数) 循环的下一个循环过程。,例:下面程序将显示从1-7的整数,并在大于4的整数后面显示字符串“after continue” i=1 while $i le 10 do echo “number = $i” if $i eq 8 ;then break fi i=expr $i +1 if $i ge 4;then continue fi echo “after continue” done,5 shell 程序实例-shell菜单程序 1程序功能描述 编写一个shell程序,使用shell编写一个菜单,分别实现列出以下内容:(1)目录内容、(2)切换目录、(3)创建文件、(4)编辑文件、(5)删除文件的功能。在此例中将用到循环语句until、分支语句case、输入输出语句read和echo。,2建立shell程序menu如下 #!/bin/bash until echo (1)List you selected directory echo (2)Change to you sele

温馨提示

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

评论

0/150

提交评论