主题 : 《Linux 基础》教案第五章 Shell的使用
我为人人,人人为我
级别: 七朵秋菊

UID: 13542
精华: 0
发帖: 1211
威望: 47453 点
无痕币: 23241 WHB
贡献值: 0 点
在线时间: 437(时)
注册时间: 2008-02-19
最后登录: 2023-08-15

0 《Linux 基础》教案第五章 Shell的使用

 
《Linux 基础》教案
第五章 Shell的使用
 
 
 
 

1.    回顾上一章: [10分钟] 2

2.    课程知识点讲解:... 2

2.1.           Shell的介绍... 2

2.1.2.         Linux shell 功能:... 4

2.1.3.         Shell 变量... 4

2.1.4.         Shell环境变量配置文件... 7

2.2.           Bash常用功能... 9

2.2.2.         命令自动展开... 10

2.2.3.         命令历史与命令重复... 11

2.3.           管道与重定向... 11

2.4.     Shell脚本... 17

2.4.1.         脚本概念... 17

2.4.2.         脚本运行... 18

2.4.3.         条件测试... 18

2.4.4.         流程控制... 20

3.    本章总结... 26

4.    考核点... 26

5.    测试题... 26

6.    扩展部分:... 26

7.    作业:... 29

 

 

 

 

 

 

 

 

 

 

 

授课教师:师资培训

课时:2小时

 

 
本章主要的目的

 

Ø  了解shell的产生与发展的过程

Ø  掌握shell环境变量的设置和使用

Ø  掌握bash的基本操作方式

Ø  掌握shell的输入输出

Ø  掌握简单的shell脚本编辑方法
 

本章重点

 

Ø  掌握shell环境变量的设置和使用

Ø  掌握bash的基本操作方式

Ø  掌握shell的输入输出

Ø  掌握简单的shell脚本编辑方法

 

本章难点

Ø  掌握简单的shell脚本编辑方法
 

1. 回顾上一章:   [10分钟]
Ø  Linux命令的使用方法

Ø  Linux文件和目录的操作管理命令

Ø  Linux用户和组管理命令

Ø  Linux打印系统管理

 

2. 课程知识点讲解:
2.1.  Shell的介绍
Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。

 

shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。当从shell或其他程序向Linux传递命令时,内核会做出相应的反应。

 

shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。

 

有一些命令,比如改变工作目录命令cd,是包含在shell内部的。还有一些命令,例如拷贝命令cp和移动命令rm,是存在于文件系统中某个目录下的单独的程序。对用户而言,不必关心一个命令是建立在shell内部还是一个单独的程序。

 

shell首先检查命令是否是内部命令,若不是再检查是否是一个应用程序(这里的应用程序可以是Linux本身的实用程序,如ls和rm,也可以是购买的商业程序,如xv,或者是自由软件,如emacs)。然后shell在搜索路径里寻找这些应用程序(搜索路径就是一个能找到可执行程序的目录列表)。如果键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。如果能够成功找到命令,该内部命令或应用程序将被分解为系统调用并传给Linux内核。

 

shell的另一个重要特性是它自身就是一个解释型的程序设计语言,shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。shell编程语言简单易学,任何在提示符中能键入的命令都能放到一个可执行的shell程序中。

 

当普通用户成功登录,系统将执行一个称为shell的程序。正是shell进程提供了命令行提示符。作为默认值(TurboLinux系统默认的shell是BASH),对普通用户用“$”作提示符,对超级用户(root)用“#”作提示符。

 

一旦出现了shell提示符,就可以键入命令名称及命令所需要的参数。shell将执行这些命令。如果一条命令花费了很长的时间来运行,或者在屏幕上产生了大量的输出,可以从键盘上按ctrl+c发出中断信号来中断它(在正常结束之前,中止它的执行)。

 

2.1.1.   Shell的种类
 

Linux中的shell有多种类型,其中最常用的几种是Bourne shell(sh)、C shell(csh)和Korn shell(ksh)。三种shell各有优缺点。Bourne shell是UNIX最初使用的shell,并且在每种UNIX上都可以使用。Bourne shell在shell编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。Linux操作系统缺省的shell是Bourne Again shell,它是Bourne shell的扩展,简称Bash,与Bourne shell完全向后兼容,并且在Bourne shell的基础上增加、增强了很多的特性。Bash放在/bin/bash中,它有许多的特色,可以提供如命令补全、命令编辑和命令历史表等功能,它还包含了很多C shell和Korn shell中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。

 

C shell是一种比Bourne shell更适于编程的shell,它的语法与C语言很相似。 Linux为喜欢使用C shell的人提供了Tcsh。Tcsh是C shell的一个扩展版本。Tcsh包括命令行编辑、可编程单词补全、拼写校正、历史命令替换、作业控制和类似C语言的语法,它不仅和Bash shell是提示符兼容,而且还提供比Bash shell更多的提示符参数。

 

Korn shell集合了C shell和Bourne shell的优点并且和Bourne shell完全兼容。Linux系统提供了pdksh(ksh的扩展),它支持任务控制,可以在命令行上挂起、后台执行、唤醒或终止程序。

 

Linux并没有冷落其他shell用户,还包括了一些流行的shell如ash、zsh等。每个shell都有它的用途,有些shell是有专利的,有些能从Internet网上或其他来源获得。要决定使用哪个shell,只需读一下各种shell的联机帮助,并试用一下。

 

用户在登录到Linux时由/etc/passwd文件来决定要使用哪个shell。例如:

 

# fgrep lisa /etc/passwd

 

lisa:x:500:500:TurboLinux User:/home/lisa:/bin/bash

 

shell被列每行的末尾(/bin/bash)。

 

2.1.2.   Linux shell 功能:
 

1)命令行编辑功能

内建立命令行编辑功能,提供编辑功能键,方便用户编辑在终端中输入的命令行

 

2)自定义功能键

允许用户将常用的命令序列定义为功能键,达到一键操作的效果

 

3)提供更丰富的变量类型、命令与控制结构 

增强了shell脚本程序的处理灵活性。

 

2.1.3.   Shell 变量
语法

变量名由下划线(_)、字母、数字组成,但变量名不能以数字开头,大小写敏感,建议变量名大写,所有的变量值为一个字符串。

赋值方式采用:变量名=值

使用“$”符号获得变量的值

 

Ø  本地变量

由用户自己定义,只作用于当前shell环境

设置变量:    变量名=变量值

引用变量:$变量名

 清除变量:unset 变量名

查看变量: set

 

示例:




Ø         环境变量

环境变量是和Shell紧密相关的,它是通过Shell命令来设置的。环境变量又可以被所有当前用户所运行的程序所使用。对于bash来说,可以通过变量名来访问相应的环境变量。
下面通过几个实例来说明

1.显示环境变量HOME
3.使用env命令显示所有的环境变量


4.使用unset命令来清除环境变量
5.使用readonly命令设置只读变量

 

 

 

示例:


常见的环境变量
PATH      决定了shell将到哪些目录中寻找命令或程序
HOME      当前用户主目录
HISTSIZE    历史记录数
LOGNAME     当前用户的登录名
HOSTNAME    指主机的名称
SHELL      前用户Shell类型
LANGUGE     语言相关的环境变量,多语言可以修改此环境变量
MAIL      当前用户的邮件存放目录
PS1       基本提示符,对于root用户是#,对于普通用户是$
PS2       附属提示符,默认是“>”

 

Ø  位置参数变量

由Shell在程序运行时设置

共10个变量,从程序名开始依次为$0-$9

shift命令递归访问参数Linux允许有9个参数,如果参数超过9个,则认为第九个及其以后所有变量看做一个参数,为了分开,则必须使用shift命令来挤掉前面的参数。



$0 这个程序的执行名字
$n 这个程序的第n个参数值,n=1...9
$* 这个程序的所有参数
$# 这个程序的参数个数
$$ 这个程序的PID
$! 执行上一个背景指令的PID
$? 上一个指令的返回值
当执行这个程序时的参数数目超过9个时,我们可以使用shift命令将参数往前移一格,如此即可
使用第10个以后的参数。除此之外,可以用set命令$n和$*,方法如下:
set string
这时$*的值即为string,而分解后则会放入$n。如果set命令后面没有参数,则会列出所有已以设定的变量以及其值:
文件名: ex1 参数:this is a test
值得一提的是,当你想从键盘输入一变量值时,你可以使用下面的命令:
read var1 var2......
这时read 会将一个字分给一个变量。如果输入的字比变量还多,最后一个变量会将剩下的字当成
其值。如果输入的字比变量还少,则后面的变量会设成空字符串。如果需要处理数值运算,我
们可以使用expr命令。

 

 

 

2.1.4.   Shell环境变量配置文件
 

Shell的大部分环境是在用户登录启动shell后就存在了,它是通过一系列的环境变量配置文件设置这些环境变量的,而root用户和普通用户可以分别对这些文件进行修改,以定制shell的环境变量。Bash的环境变量配置文件包括:

/etc/profile

/etc/profile.d/*

/etc/bashrc

用户主目录下的.bash_profile

用户主目录的.bashrc

注意后两个的区别:'.bash_profile'只在会话开始时被读取一次,而'.bashrc'则每次打开新的终端(如新的 xterm 窗口)时,都要被读取。按照传统,您得将定义的变量,如 PATH ,放到'.bash_profile'中,而象 aliases(别名)和函数之类,则放在'.bashrc'。但由于'.bash_profile'经常被设置成先读取'.bashrc'的内容,您如果图省事的话,就把所有配置都放进'.bashrc'。

这些文件是每一位用户的设置。系统级的设置存储在'/etc/profile'、'/etc/bashrc'及目录'/etc/profile.d'下的文件中。但您得习惯用各自的配置文件:编辑不需要'root'权限,还可以使您的设置更有个性。当系统级与用户级的设置发生冲突时,将采用用户的设置。

读取'.bashrc'的内容,您如果要省点事的话,就把您所有的配置都放进'.bashrc'。

上面的这些文件是每位用户的设置,系统级的设置存储在'/etc/profile'、'/etc/bashrc'及目录'/etc/profile.d'下的文件中。您最好习惯使用各自的配置文件:编辑不需要'root'权限,还可以使您的设置更具个性。当系统级与用户级的设置发生冲突时,将优先采用用户的设置。

如果要定制一个为每个用户都能使用的环境变量,则需要以root身份登录系统,然后修改/etc/profile文件

PATH 变量:

彼此之间的路径用“:”来分隔,然后用export导出,注意新添加的路径应该在原来的($PATH)后面,

如果修改所有用户的PATH则修改/etc/profile的PATH

如果修改单个用户的PATH 则修改私有shell文件的PATH,这样修改不会影响其他用户的设置

PATH 必须大写

一定要在前面使用$PATH导出原有的路径值,否则路径只剩下一条路径了

系统缺省情况下会在PATH前加上/usr/local/bin目录。

示例

PS1设置了提示符,在bash下,提示符的内容由环境变量PS1来提供

缺省的提示符内容为括号[ ] 、用户名(\u)、分隔符(@)  主机名(\h) 、工作目录(\w)、提示符号(# 或 $)

如图:


 

 

2.2.  Bash常用功能
 

2.2.1.   通配符
 

通配符用于模式匹配,如文件名匹配、路经名搜索、字符串查找等。常用的通配符有*、?和括在方括号[ ]中的字符序列。用户可以在作为命令参数的文件名中包含这些通配符,构成一个所谓的“模式串”,在执行过程中进行模式匹配。

 

* 代表任何字符串(长度可以不等),例如:“f*”匹配以f打头的任意字符串。但应注意,文件名前的圆点(.)和路经名中的斜线(/)必须显式匹配。例如“*”不能匹配.file,而“.*”才可以匹配.file。

示例:



 

? 代表任何单个字符。



 

[] 代表指定的一个字符范围,只要文件名中[]位置处的字符在[]中指定的范围之内,那么这个文件名就与这个模式串匹配。方括号中的字符范围可以由直接给出的字符组成,也可以由表示限定范围的起始字符、终止字符及中间的连字符(-)组成。例如,f [a- d]与f [abcd]的作用相同。Shell将把与命令行中指定的模式串相匹配的所有文件名都作为命令的参数,形成最终的命令,然后再执行这个命令。

*

 

 



特别需要注意的是,连字符“-”仅在方括号内有效,表示字符范围,如在方括号外面就成为普通字符了。而*和?只在方括号外面是通配符,若出现在方括号之内,它们也失去通配符的能力,成为普通字符了。例如,模式“- a[*?]abc”中只有一对方括号是通配符,*和?均为普通字符,因此,它匹配的字符串只能是- a*abc和- a?abc。

 

最后说明一下使用通配符时需要注意的一些问题。由于*、?和[]对于shell来说具有比较特殊的意义,因此在正常的文件名中不应出现这些字符。特别是在目录名中不要出现它们,否则Shell匹配起来可能会无穷的递归下去。另外要注意的一点是:如果目录中没有与指定的模式串相匹配的文件名,那么Shell将使用此模式串本身作为参数传给有关命令。这可能就是命令中出现特殊字符的原因所在。

 

2.2.2.   命令自动展开
BASH提供了命令行自动展开的功能,用户使用这个功能能够获得对忘记的命令名的展开提示,也可以自动展开较长的命令输入。这项功能通过<TAB>键来完成。
命令自动展开功能是BASH通过搜索PATH环境变量设置的命令目录,在其中寻找与目前已输入的命令前部分相匹配的命令,如果只有唯一的匹配,就自动展开;如果有多个,BASH将全部列出这些命令,供用户选择。
BASH命令行自动展开的功能除了能够自动展开命令外,还可以自动展开文件路径。如需要进入到/usr/local/src目录,并不需要用户输入全部的字符,只需如下方式,就可到达该目录。

#cd /u<TAB>/l<TAB>/s<TAB>

 

 

2.2.3.   命令历史与命令重复
BASH加入了C shell所提供的命令历史功能,它会自动记录最近执行过的命令。命令是由1开始的编号。History工具程序是一种短期记忆程序,记录用户最近所执行的命令,要查看这些命令,可以在命令行输入History,将会显示最近执行过的命令列表。



History命令列表:

history     查看清单(缺省1000行)

光标上下移动键

!!              重复执行上一条命令

!n              执行第n条命令

!string         执行最后一个以string开头的命令

!!:p            显示前一个命令内容

!$               重复前一个命令的最后一个参数

<Shift>+<Page Up>   上翻页

<Shift>+<Page Down> 下翻页

 

 

2.3.  管道与重定向
2.3.1.   标准输入与输出
 

执行一个shell命令行时通常会自动打开三个标准文件:

标准输入文件(stdin),通常对应终端的键盘

标准输出文件(stdout)

标准错误输出文件(stderr)

标准输出和标准错误输出这两个文件都对应终端的屏幕。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。

 

 

 

直接使用标准输入/输出文件存在以下问题:

 

1)输入数据从终端输入时,用户费了半天劲输入的数据只能用一次。下次再想用这些数据时就得重新输入。而且在终端上输入时,若输入有误修改起来不是很方便。

 

2)输出到终端屏幕上的信息只能看不能动。我们无法对此输出作更多处理,如将输出作为另一命令的输入进行进一步的处理等。

 

为了解决上述问题,Linux系统为输入、输出的传送引入了另外两种机制,即输入/输出重定向和管道。

 

Ø  输入重定向

 

输入重定向是指把命令(或可执行程序)的标准输入重定向到指定的文件中。也就是说,输入可以不来自键盘,而来自一个指定的文件。所以说,输入重定向主要用于改变一个命令的输入源,特别是改变那些需要大量输入的输入源。

 

例如,命令wc统计指定文件包含的行数、单词数和字符数。如果仅在命令行上键入:

 



wc将等待用户告诉它统计什么,这时shell就好象死了一样,从键盘键入的所有文本都出现在屏幕上,但并没有什么结果,直至按下<ctrl+d>,wc才将命令结果写在屏幕上。

 

 

 

 

 

 

 

 

 

 

 

如果给出一个文件名作为wc命令的参数,如下例所示,wc将返回该文件所包含的行数、单词数和字符数。



另一种把/etc/passwd文件内容传给wc命令的方法是重定向wc的输入。输入重定向的一般形式为:命令<文件名。可以用下面的命令把wc命令的输入重定向为/etc/passwd文件:



另一种输入重定向称为here文档,它告诉shell当前命令的标准输入来自命令行。here文档的重定向操作符使用<<。它将一对分隔符(本例中用stop表示)之间的正文重定向输入给命令。下例将一对分隔符stop之间的正文作为wc命令的输入,统计出正文的行数、单词数和字符数。

 



在<<操作符后面,任何字符都可以作为正文开始前的分隔符,本例中使用delim作为分隔符。here文档的正文一直延续到遇见另一个分隔符为止。第二个分隔符应出现在新行的开头。这时here文档的正文(不包括开始和结束的分隔符)将重新定向送给命令wc作为它的标准输入。

 

由于大多数命令都以参数的形式在命令行上指定输入文件的文件名,所以输入重定向并不经常使用。尽管如此,当要使用一个不接受文件名作为输入参数的命令,而需要的输入内容又存在一个文件里时,就能用输入重定向解决问题。
 

Ø  输出重定向

 

输出重定向是指把命令(或可执行程序)的标准输出或标准错误输出重新定向到指定文件中。这样,该命令的输出就不显示在屏幕上,而是写入到指定文件中。

 

输出重定向比输入重定向更常用,很多情况下都可以使用这种功能。例如,如果某个命令的输出很多,在屏幕上不能完全显示,那么将输出重定向到一个文件中,然后再用文本编辑器打开这个文件,就可以查看输出信息;如果想保存一个命令的输出,也可以使用这种方法。还有,输出重定向可以用于把一个命令的输出当作另一个命令的输入(还有一种更简单的方法,就是使用管道,将在下面介绍)。

 

输出重定向的一般形式为:命令>文件名。例如:



将ls命令的输出保存为一个名为record的文件。

 

注:如果>符号后边的文件已存在,那么这个文件将被重写。

 

为避免输出重定向中指定文件只能存放当前命令的输出重定向的内容,shell提供了输出重定向的一种追加手段。输出追加重定向与输出重定向的功能非常相似,区别仅在于输出追加重定向的功能是把命令(或可执行程序)的输出结果追加到指定文件的最后,而该文件原有内容不被破坏。

 

如果要将一条命令的输出结果追加到指定文件的后面,可以使用追加重定向操作符>>。形式为:命令>>文件名。

例如:



Ø  标准错误输出重定向

 

和程序的标准输出重定向一样,程序的错误输出也可以重新定向。使用符号2>(或追加符号2>>)表示对错误输出设备重定向。例如下面的命令:

 



可在屏幕上看到程序的正常输出结果,但又将程序的任何错误信息送到文件err.file中,以备将来检查用。

 

还可以使用另一个输出重定向操作符(&>)将标准输出和错误输出同时送到同一文件中。例如:

 


 

1.1.1.   管 道
 

将一个程序或命令的输出作为另一个程序或命令的输入,有两种方法,一种是通过一个临时文件将两个命令或程序结合在一起,例如上个例子中的/tmp/dir文件将ls和wc命令联在一起;另一种是Linux所提供的管道功能。这种方法比前一种方法更好。

 

管道可以把一系列命令连接起来,这意味着第一个命令的输出会作为第二个命令的输入通过管道传给第二个命令,第二个命令的输出又会作为第三个命令的输入,以此类推。显示在屏幕上的是管道行中最后一个命令的输出(如果命令行中未使用输出重定向)。

 

通过使用管道符“|”来建立一个管道行。用管道重写上面的例子:

 




 

 

 

 

再如:

 



管道将cat命令(列出一个文件的内容)的输出送给grep命令。grep命令在输入里查找单词root,grep命令的输出则是所有包含单词root的行。

 

命令替换

 

命令替换和重定向有些相似,但区别在于命令替换是将一个命令的输出作为另外一个命令的参数。常用命令格式为:

 

command1 `command2`

 

其中,command2的输出将作为command1的参数。需要注意的是这里的`符号,被它括起来的内容将作为命令执行,执行后的结果作为command1的参数。例如:

 

$ cd `pwd`

 

该命令将pwd命令列出的目录作为cd命令的参数,结果仍然是停留在当前目录下。

 

1.2.            Shell脚本
1.2.1.   脚本概念
Ø  无需编译,解释执行

Ø  文本文件形式存在

Ø  强大的正则表达式操作

Ø  运行速度慢

Ø  数据类型支持少

Ø  用于系统管理和文件操作

 

1.2.2.   脚本运行
 

Ø  编写脚本程序

Ø  改变脚本程序文件的权限为可执行

Ø  运行脚本程序方法:

# ./脚本程序

# bash 脚本程序

# ../脚本程序

# exec 脚本程序

 



 

 

1.2.3.   条件测试
条件测试可以说是脚本执行的基础,很多功能都是由条件测试,进行判断,然后执行下一步的操作。

 

使用test命令

语法:test 测试条件

 

使用括号[ ]

语法:[ 条件 ]   

条件表达式的值为真返回零,为假时返回非零值

 

 

条件测试要配合条件符号来使用

 

条件符号说明:

-a ,-o,-!:逻辑的与、或、非

-eq ,-ne , -lt ,-le ,-gt, -ge :等于、不等于、小于、小于等于、大于、大于等于

= 、!:字符串比较,是否相等

-z 、-n :字符串长度为0,字符串长度为非0

-e 、:文件存在

-d、-f :目录文件、常规文件

-r 、-w 、-x:文件可读,可写,可执行

 

条件测试示例:

 


-e :是判断文件install.log是否存在,如果存在 –真

-a:逻辑与的关系,全真才真

-f :判断文件install.log.syslog 是否是普通文件

echo :显示结果  $?返回执行或的状态

 

 

 

 

 

 

1.2.4.   流程控制
Ø  if then else语句

 

语法:

               if [ 条件语句1 ]

         then

            命令

         elif [ 条件语句2 ]

         then

                命令

         else

            命令

         fi

 

if 条件语句是最常用到的流程控制语句,我们通常用它来控制脚本的工作,我们举例来详细看一下!

如下图:

 


 

 

 

 

 

 

 

执行结果如下图:
 


Ø  for循环

 

语法:

   for 变量名 in  列表

         do

            命令

         Done

 



 

 

Ø  until循环

 

语法:

     until  条件

          do

            命令

          done

 

 

 

 


 

 

 

 

 

Ø  while循环

 

语法:

    while 条件

         do

            命令

         Done

 



 

执行结果如下图:

 

 

 

 

 

 

 

 

 

 

Ø  case语句

 

语法:

case   值 in

          模式1)

             命令1;;

          模式2)

            命令2;;

          模式3)

            命令3;;

     Esac

 

脚本示例如下图:



 

执行结果如下图:

Ø  函数

1)函数定义

函数名( )

 {

    命令

  }

 

2)函数调用

3)函数导出

 

函数应用示例:

 

 

函数应用执行结果如下图:

      
2. 本章总结  
Ø  shell是Linux系统与用户之间的交互界面,用户向shell提交任务,shell向系统内核转交任务,并管理相关工作,执行完成后shell取回工作结果,通过界面返回给用户。shell还提供编程语言,接受用户关于批处理任务的提交

Ø  第一个重要的shell是Stephen Bourneshell于1979年底提出的Bourne shell,另外两个重要的shell是Kron shell 和 C shell。Linux支持3种类型的shell,默认的为Bourne shell的变体版本GNU bash

Ø  shell支持4种类型的变量(本地变量、环境变量、参数变量及预定义变量)

Ø  shell的通配符包括“*”和“? ”,分别匹配任意多的字符和一个任意字符。bash提供了命令行自动展开和历史命令管理操作的功能

Ø  shell打开0、1、2号文件描述符文件,并对应为键盘和屏幕,构成shell的标准输入输出,大多数命令的输入输出通过标准输入输出进行。shell提供了输入输出重定向和管道,把标准的输入输出方向改变为其它的文件或命令

Ø  shell提供了数据变量、参数传递、条件测试、流程控制、数据输入和输出、函数等丰富的程序控制功能,用户可以通过shell语言编码实现系统管理任务的批处理和环境设置

3. 考核点
 考核点1:shell的重定向和管道
 考核点2:shell脚本编辑
4. 测试题
 测试题1:linux命令抽查:cp ,grep,wc

 

5. 扩展部分:
 linux的符号

 

在shell中引号分为三种:单引号,双引号和反引号。

 

* 单引号 ‘

 

由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释。例如:

 

$ string=’$PATH’

 

$ echo $string

 

$PATH

 

$

 

可见$保持了其本身的含义,作为普通字符出现。

 

* 双引号 “

 

由双引号括起来的字符,除$、、’、和”这几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通字符对待。对于$来说,就是用其后指定的变量的值来代替这个变量和$;对于而言,是转义字符,它告诉shell不要对其后面的那个字符进行特殊处理,只当作普通字符即可。可以想见,在双引号中需要在前面加上的只有四个字符$,,’和”本身。而对”号,若其前面没有加,则Shell会将它同前一个”号匹配。

 

例如,我们假定PATH的值为.:/usr/bin:/bin,输入如下命令:

 

$ TestString=”$PATH\”$PATH”

 

$ echo $TestString

 

.:/usr/bin:/ bin”$PATH

 

$

 

读者可以自己试一下在第二个双引号之前不加会产生什么结果。

 

 

 

* 反引号 `

 

反引号(`)这个字符所对应的键一般位于键盘的左上角,不要将其同单引号(’)混淆。反引号括起来的字符串被shell解释为命令行,在执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。例如:

 

$ pwd

 

/home/xyz

 

$ string=”current directory is `pwd`”

 

$ echo $string

 

current directour is /home/xyz

 

$

 

shell执行echo命令时,首先执行`pwd`中的命令pwd,并将输出结果/home/xyz取代`pwd`这部分,最后输出替换后的整个结果。

 

利用反引号的这种功能可以进行命令置换,即把反引号括起来的执行结果赋值给指定变量。例如:

 

$ today=`date`

 

$ echo Today is $today

 

Today is Mon Apr 15 16:20:13 CST 1999

 

$

 

反引号还可以嵌套使用。但需注意,嵌套使用时内层的反引号必须用反斜线()将其转义。例如:

 

$ abc=`echo The number of users is `who| wc-l``

 

$ echo $abc

 

The number of users is 5

 

$

 

在反引号之间的命令行中也可以使用shell的特殊字符。Shell为得到``中命令的结果,它实际上要去执行``中指定的命令。执行时,命令中的特殊字符,如$,”,?等又将具有特殊含义,并且``所包含的可以是任何一个合法的Shell命令,如:

 

$ ls

 

note readme.txt Notice Unix.dir

 

$ TestString=”`echo $HOME ` ` ls [nN]*`”

 

$ echo $TestString

 

/home/yxz note Notice

 

$

 

 

 注释符

 

在shell编程中经常要对某些正文行进行注释,以增加程序的可读性。在Shell中以字符“#”开头的正文行表示注释行。

 

       
 

        
6. 作业:
 习题1:课后题
 习题2:复习linux重定向,管道
 习题3:编写简单的流程控制脚本

Total 0.122046(s) query 3, Time now is:05-19 14:42, Gzip enabled 粤ICP备07514325号-1
Powered by PHPWind v7.3.2 Certificate Code © 2003-13 秋无痕论坛