第5讲shell编程_第1页
第5讲shell编程_第2页
第5讲shell编程_第3页
第5讲shell编程_第4页
第5讲shell编程_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1、一 shell编程的作用及其工具1 shell概述l什么是shell?Shell是用户与linux操作系统之间的界面。也就是说用户是通过shell与操作系统进行交互的。当用户输入命令后,由shell进行解释并提交系统内核处理。Shell与linux命令一样,都是实用程序,但两者又有区别:2022-6-251Shell在用户注册到系统后,就被系统装入内存,并一直允许到用户退出系统为止。而一般命令仅当被调用时,才由系统装入内存执行。Shell本身也是一种可编程的程序设计语言,用shell写的程序(也称脚本)相当于dos或windows下的批处理文件。在脚本里可以包括复杂的循环、条件、数学运算和控制

2、结构等。2022-6-252lShell程序语言的特点Shell作为语言,允许通过编程来完成复杂的功能处理,但是与高级语言相比具有不同的特点:lShell是解释性的,而多数高级语言是编译性的。lShell语言与高级语言处理的对象不同。lShell与系统有密切的关系。lShell容易编写、调试、灵活性较强,但速度较低。lShell作为命令级语言,命令组合功能很强。2022-6-253其中bash和zsh在不同程度上支持csh的语法。Bash是bourne again shell的缩写,是目前大多数linux系统的缺省shell。现着重介绍bash的特点:l自动补全功能 假设要输入的命令很长,或者

3、命令后面要给的文件名很长,这时只要按TAB键,bash就会在可能的命令或文件名中寻找匹配的命令,若找到的话就会自动补齐。当然,用户键入的字符越多,bash搜寻匹配的文件名或命令就越容易找到。当有多个匹配的情况,会给出匹配的情况。2022-6-254l命令行编辑程序当输入bash命令时,若输入错误,可以在未执行前对所输入的命令进行编辑。l命令历史所谓命令历史就是把曾经输入过的命令记录起来,方便以后的查询和使用。DOS下的doskey功能就是从shell里学来的。我们可以用上、下键来搜寻已经输入过的或类似的命令。2022-6-2553 Shell语言的类型Shell的语法类型有两种:bourne

4、shell和c shell,他们之间彼此不兼容。Bourne shell是一种最简单的shell,在早期的unix系统中使用。他的效率较低,但是兼容性较好。包括sh 、bash、psh和zsh等。C shell是所有shell中最复杂的一种。其特点类似于c程序设计语言。在命令编辑方面比bourne shell好,但是可移植性较差。包括csh、tcsh等。Korn shell可以说是另一种shell,他把bourne shell和c shell的很多优点和特点都组合集中起来。2022-6-2564 shell的启动l系统在用户登录时启动Shell在linux系统引导过程中,首先启动init进程以

5、查询终端的各个端口及其特性,当发现活动的终端时,调用getty进程,接着getty进程在接收到用户名和口令后,调用login进程。login进程负责验证用户身份,验证后把控制权交给shell程序。Shell程序根据环境文件建立系统范围内的工作环境和该用户自己的工作环境,最后给出相应的提示符(#、$)等。2022-6-257在/etc/passwd文件中指定要启动的shell。Root:x:0:0:root:/root:/bin/bashJohn:x:201:certer starf:/home:/bin/shl命令行状态下的交互shell启动交互模式是由用户输入命令由shell执行。是shel

6、l与用户的交互。在系统中可能有多种版本的shell存在,可通过相应的命令来启动。如:$bsh$ksh $sh等。使用exit命令退出时,shell也随之退出。2022-6-258非交互式的启动:在这种模式下,shell可以一次执行多个shell命令。相当于DOS的批处理程序。它是一个包含命令的文件并可以逐条执行其中的命令。启动:$/bin/sh filename其中filename是包含shell命令的文件名。2022-6-259二 Shell的功能l命令行解释用户登录系统后会看到shell提示符,在提示符下用户输入命令或数据后,shell负责解释、分析输入的内容,并且决定做什么。同时替系统内

7、核删除命令行中不必要的信息(包括空格符、水平制表符、换行符等)。命令是一个可执行的linux命令、程序、工具或shell脚本。2022-6-2510例:$ls l file1 file2 file3$echo welcom to linuxl保留字Shell脚本中具有特殊意义的字如,控制循环操作的do、for、while等;条件控制的if、then和else等。用户在给文件命名或使用变量时不能使用这些保留字。保留字随shell的不同会有不同。2022-6-2511lshell通配符(元字符)是一组特殊意义的字符。善于利用这些特殊字符可以使与linux的沟通得心应手。例:.*?; 分割符,当命令

8、行有多个命令时,做分割用。. 括号内的一个字符a-z* 小写字母开头的所有字符串。2022-6-2512l变量、文件名的替换l变量的替换:与其它程序设计语言一样,shell允许对变量赋值,shell一旦在命令行中发现$变量名时,将在变量名的位置上用以前赋给该变量的值代替$变量名。例:$myhome = /usr/app1$echo $myhome输出为:/usr/app1$ls x $myhome等效为:$ls x /usr/app12022-6-2513l文件名的替换:shell在命令行中将文件名进行替换。在确定要执行的程序名和它的自变量之前,要对命令行扫描,找出元字符进行相应的文件名替换。

9、例:$ls x file1 file2 file3$echo *file1 file2 file32022-6-2514l输入/输出的重定向l标准输入:STDIN(通常设定为键盘)一般由标准输入读入数据。l标准输出:STDOUT(通常设定为显示器),系统将处理的结果输出到显示器。例:cat命令的功能时从命令行读入数据,并将这些数据直接送到标准输出显示。例:sort命令按行读入文件正文(命令行中无文件名时,表示从标准输入读入),进行排序并将结果送到标准输出显示。标准输入/输出是由shell建立的,当需要其它的输入/输出时,也由shell重新指定。2022-6-2515l重定向字符: 、 、 ms

10、g$cat msg输出为: please call me :334433例:使用cat读入数据并重定向到文件test2022-6-2516l管道:管道是一个命令的标准输出与另一个标准输入之间的连接,且不经过任何中间文件。在shell中由两种结构类型,管道线和命令表。当shell检测到一个管道操作符时,就建立一个系统管道文件,这是一个先进先出的数据结构,它允许在同一时刻对管道线上的命令或程序进行读和写,即允许两个无关的命令通过管道连接交换信息。2022-6-2517管道线:是由管道操作符分隔的一个命令序列,最简单的管道线是一个简单命令。管道操作符:|命令表:一串管道线构成了一个命令表,最简单的命

11、令表是一个管道线,一个命令表返回的值是该命令表中最后一个管道线的出口状态。管道线分隔符:分隔命令表元素,确定管道线执行的条件。分隔符含义如下:; 表示按顺序执行管道线2022-6-2518l运行环境的控制当用户登录到linux系统中,系统启动一个交互式的shell命令解释器(又称为注册shell),该shell为此用户创建工作环境。shell还提供了一些命令,允许用户对自己运行的环境进行控制,即对运行环境实现客户化。用户的运行环境包括:主目录、终端类型、输入命令提示符、查找命令的路径名、以及其它全局变量等。这些用户环境放在环境文件中。如:.bash-profile、.profile等。2022

12、-6-2519l以 .(点)开头的文件是特殊文件,系统把它们用作不同的用途l.bash_profile 就是一个这样的文件l每个主目录都有一个 .bash_profile 文件,用来定制用户配置l.bash_profile 只在用户登录系统时执行l用户的每次登录会话都要执行 .bash profile 文件 2022-6-2520后缀是 rc 的文件具有特殊含义rc 表示“run control”(运行控制)这些文件允许以用户所希望的方式来配置程序 .bashrc 表示程序 bash 的特殊配置文件每个主目录都有一个 .bashrc 文件 2022-6-2521lshell编程 1 创建she

13、ll程序Shell程序又称shell脚本,是保存在一个文件中的命令列表。所以创建shell程序首先要使用文本编辑器创建一个文件,在此文件中按照shell名的语法格式输入命令行。l运行shell要通过输入名字来运行脚本,需要做两件事情:l脚本正确(运行正确的shell)l文件可执行(设置)2022-6-2522lshell常用命令Shell提供了许多命令以方便用户与系统的交互对话,这些命令的选项较多,并可利用命令的集成(输入/输出改道、管道)及程序设计功能组合成许多命令。外部命令:当用户输入一个命令时,注册shell首先通过查询路径查找该命令,然后生成一个副本(称为该shell的子shell),

14、由子shell来负责解释执行这个命令。在命令执行过程中,注册shell(父shell)等待子shell的执行而进入睡眠状态,一旦子shell执行完毕,子shell将唤醒注册shell,而自己的生命周期到此结束。如:cat、ls、chmod、cpmkdir等。2022-6-2523l内部命令:构造在shell内部,主要是出于效率的考虑,它主要放在内存中,执行时不必根据PATH变量进行查询。内部命令是在当前shell内部立即被执行的,不必为此创建新进程。所以,编写shell程序时应尽量的使用shell的内部命令,以提高shell程序的效率。如:#:注释命令:空命令,通常放在一行的最左边,实际不做任

15、何事情。Cd、set、exec、exit、for、if等。2022-6-2524lshell变量1 shell变量描述虽然shell是基于字符串的程序设计语言,但也有变量。Shell变量能够而且只能存储正文字符串,即他只有一种类型的变量-字符串。但是,从赋值的形式上看,则可以分成四种类型的变量或变量形式。l用户自定义变量l语法格式:name=string,赋值号两边不允许有空白符。2022-6-2525例:nodehost=beijing.UUCPpath-=/bin:/usr/bin:/etc/binCount=10l允许一次对多个变量赋值。例:A=$B B=abc C=“OK”引用变量用

16、$ echo $A $B $C输出:abc abc OKl当引用一个未设置的变量时,其隐含值为空。例:$ echo “$mail is path of maibox”输出:is path of maibox2022-6-2526l如果用双引号“” 将值括起来,则括起来的字符串允许出现空格、制表符和换行符等特殊字符,而且允许有变量替换。例:$ MAIL=/var/mail/fk $var=“$MAIL is path of mailbox” $echo $var 输出:/var/mail/fk is path of mailbox$ str=“This is na book”$ echo -e

17、$str输出:This is a book.2022-6-2527l如果用单引号 将值括起来,则括起来的字符串允许出现空格、制表符和换行符的特殊字符,但不允许有变量替换。例:$ BOOK=“English book” $ MSG=$BOOK $ echo $MSG输出:BOOK例:$ msg=Today is Sunday $ echo $msg输出:Today is Sunday.2022-6-2528l引用变量的值时,可以用花括号将变量名称括起来,使变量名称与他的后续字符分隔开。尤其仅跟在变量名称后面的字符是字母、数字或下划线时,必须要使用花括号。例:$ str=This is a str

18、ing $ echo “$strent test of variables”输出:This is a tringent test of variables若不使用花括号$echo “$strent test of variables”输出:test of variables.此时,把strent误认为一个变量名,且未赋值。2022-6-2529l可以将变量设置为只读方式格式为:readonly 变量名1 变量名2例:$ ux=UNIX.SUN $ readonly ux $ ux=UNIX.SCO提示错误信息:ux:is read only查看只读形式的变量,格式为readonly例:$ re

19、adonly输出:readonly ux或用echo命令2022-6-2530l位置变量顾名思义,这类变量是与变量所在位置有关的变量,这是一种特殊的变量。当一个shell过程被调用时,shell隐含地为它建立一系列的位置变量。这种位置变量是身体预定义好的,可以直接引用。如:命令行的shell过程名本身被指定为位置变量$0,第一个命令参数为$1,例:命令 ls / /bin /etc /usr/bin /dev $0 $1 $2 $3 $4 $5 2022-6-2531l内部命令shift的作用当位置变量个数超出9时,就不能直接引用位置大于9的位置变量了。必须用shift命令存取。执行一次shi

20、ft命令,删除$1位置变量,并使其它的所有位置变量向左移动一个位置。例:命令Myprog a b c d e f g h I j其对应位置变量和使用shift命令后位置变量的移动为:2022-6-2532$0 $1 $2 $3 $4 $5 $6 $7 $8 $9Myprog a b c d e f g h i jShift b c d e f g h i jShift c d e f g h i jShift d e f g h i jl用set命令进行强制性赋值位置变量可以用set命令进行强制性赋值 Set sun mon tue wed thu fri sat结果$1 $2 $3 $4 $

21、5 $6 $7 $8注意:$0不能用这种方法强制赋值的。可以用echo命令查看2022-6-2533l环境变量Shell的执行环境由一系列环境变量组成,这些变量使由shell维护和管理的,所有这些变量都可以被用户重新设置,变量名由大写字母组成。例CDPATH执行cd命令时使用的搜索路径 HOME 用户的home目录PATH 寻找命令或课执行文件的搜索路径PS1 主命令提示符,默认为“$”PS2 从命令提示符,默认为“”TERM 使用的终端类型。2022-6-2534l预定义的特殊变量在shell中有一组特殊的变量,其变量名和变量值只有shell本身才可以设置。l“$#” 记录传递给shell的

22、自变量个数。例 myprog a b c则$# 的值为3。2022-6-2535l“$?” 取最近一次命令执行后的退出状态:执行成功返回码为0,执行失败返回码为1。例:$ test r my_file若my-file文件不可读,则$ echo $?输出为1l$ 记录当前shell的进程号。2022-6-2536l特殊字符的引用在shell中所使用的许多特殊符号也可以为其它目的所使用,因此当不需要引用这些字符的特殊含义时,就必须进行删除。l转义符()的引用使用转义符消除单个字符的特殊含义。使紧跟在转义符后面的单个字符按照字符本身的实际含义来解释。例:转义符具有续行的作用2022-6-2537$

23、vi back.sh#!/bin/shEcho e “enter your name:c”Read nameEcho hello $name运行$ bash back.sh结果:Enter your name:johnHello john2022-6-2538l单引号的引用使用单引号消除被括在单引号中的所有特殊字符的含义,所以单引号表示内容照原样不动。例:$ echo type a $ * please输出:type a $ * please而不把$ *看作当前目录。例:$vi test.shGrep *.zh|$.sh $1Grep 命令的使用2022-6-2539l双引号的引用双引号能消除

24、被括在双引号中的大部分特殊字符的含义。而不能消除的特殊字符为:$、“、例:$ echo “type a $ *,please”输出:Type a $*,pleasel特殊字符串引用的例外引用双引号、单引号和转义符都不能消除对echo命令有特殊功能的控制字符串的特殊含义。如:b:退格;c:显示后不换行;f:在终端屏幕上的开始处显示;n:换行;r:回车;t制表符;v:垂直制表符;:反歇线。2022-6-2540l局部变量当用户注册之后,用户就拥有了注册shell的运行环境,注册shell在接收到用户输入的命令后(非内部命令),通常派生处一个子shell,由子shell负责解释执行该命令。局部变量仅

25、在特定的环境下才能使用。子shell不能改变父shell的变量值。2022-6-2541l全局变量全局变量是一种特殊的变量,可以被任何运行的子shell来引用。但是子shell不能改变全局变量的值,仅能够对全局变量的一个副本进行改变。定义格式:export variables其中 variables是全局变量的变量名表。2022-6-2542l条件与test命令lexit命令Shell内部命令,用于终止shell程序的执行,该命令可以带一贯定义出口状态值的自变量。Exit(0):终止程序执行返回0值。Exit(1):终止程序执行,返回1值。2 test命令2022-6-2543l一 编写脚本的动机l编写脚本最常见的用法是创建应用程序包装。l他们是定义某一个应用程序所需环境变量的shell脚本。并启动该应用程序。l修改系统启动的某个方面,在启动和关闭序列中添加服务。l1 简化操作:把要反复输入的一系列命令包装在脚本中可以使激活这一系列的命令更为简洁。l2 自动化:系统管理员必须定期进行一些工作,如:整理日志文件、清除/tmp下的文件、备份等。使这些工作自动化可以减轻系统管理员的负担。2022-6-25443 控制操作 提醒熟练的用户和操作员,使他们知道要做什么?可以提供哪些命令和参数等。例:echo “enter the directory to use” read dir

温馨提示

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

最新文档

评论

0/150

提交评论