Linux课程介绍-第四章.ppt
《Linux课程介绍-第四章.ppt》由会员分享,可在线阅读,更多相关《Linux课程介绍-第四章.ppt(83页珍藏版)》请在三一文库上搜索。
1、2010年秋季,北京理工大学珠海学院计算机学院,Linux系统管理与应用,计算机科学教研室 主讲:胡敬朋,本章教学安排,一、教学目的、要求: 本章要求掌握Linux下shell的使用方法。主要介绍Linux shell的语法结构、变量定义以及赋值引用、标点符号、控制语句等。 二、教学内容 第1节 shell概述 第9节 控制结构 第2节 命令历史 第10节 函数 第3节 名称补全 第11节 作业控制 第4节 别名 第12节 shell内置命令 第5节 shell特殊字符 第13节 shell脚本调试 第6节 shell变量 第7节 参数置换变量 第8节 算术运算,三、重点内容 shell的主要
2、特点、类型、建立和执行的方式 bash变量的分类、定义形式及引用规则 各种控制语句的格式、功能及流程 bash中算术运算的使用 bash函数的构成及使用规则 bash中的内置命令 采用图表和板书重点讲解,第四章 Linux Shell程序设计,第1节 shell概述 第9节 控制结构 第2节 命令历史 第10节 函数 第3节 名称补全 第11节 作业控制 第4节 别名 第12节 shell内置命令 第5节 shell特殊字符 第13节 shell脚本调试 第6节 shell变量 第7节 参数置换变量 第8节 算术运算,4.1 shell 概述,4.1.1 shell的特点和主要版本 4.1.2
3、 shell程序示例 4.1.3 shell脚本的建立和执行,4.1.1 shell的特点和主要版本,作为命令解释程序 一种高级程序设计语言,它有变量,关键字,有各种控制语句,如if、case、while、for等语句,支持函数模块,有自己的语法结构 1.shell的特点 组合新命令 提供了文件名扩展字符 直接使用shell的内置命令 灵活地使用数据流 结构化的程序模块 在后台执行命令 可配置的环境 高级的命令语言,2shell的种类 (1)Bourne shell(简称sh) (2)C shell(简称csh) (3)Korn shell(简称ksh) (4)Bourne Again she
4、ll(即bash),4.1.2 shell程序示例,【例4.1】 由三条简单命令组成的shell程序(文件名为ex1)。 $ cat ex1 date pwd cd ,【例4.2】 带有控制结构的shell程序(文件名为ex2)。 $ cat ex2 #!/bin/bash # If no arguments, then listing the current directory. # Otherwise, listing each subdirectory. if test $# = 0 then ls . else for i do ls -l $i | grep d done fi,4.
5、1.3 shell脚本的建立和执行,1、shell脚本的建立 2、执行shell脚本的方式 执行shell脚本的方式基本上有三种: (1)输入定向到shell脚本 $ bash 脚本名 (2)以脚本名作为参数 其一般形式是: $ bash 脚本名 参数 如果以目前shell(以表示)执行一个shell脚本,则可以使用如下简便形式: $ 脚本名 参数 (3)将shell脚本的权限设置为可执行,然后在提示符下直接执行它。 $ chmod a+x ex2 $ PATH=$PATH:. $ ex2 注意,此时该脚本所在的目录应被包含在命令搜索路径(PATH)中,4.2 命令历史,4.2.1显示历史命令
6、 4.2.2执行历史命令 4.2.3配置历史命令环境,4.2.1 显示历史命令,语法格式是:history option arg 如果不带任何参数,则history命令会显示历史命令的清单 如果history 后给出一个正整数(如50),就只显示历史表中的最后50行命令 如果history后给出一个文件名,就把它作为历史文件名 常用的选项有: -a 在历史文件中添加“新”历史命令行。 -n 从历史文件中读取尚未读入的历史命令行,添加到当前历史清单中。 -r 读取历史文件的内容,并把它作为当前的历史命令。 -w 把当前的历史写到历史文件中,覆盖原有内容。 -c 删除历史清单中所有的项。,4.2.
7、2 执行历史命令,执行历史命令是命令替换之一,它以字符“!”开头、后随1个或多个字符来定义用户所需的某种类型的历史命令 基本的事件指定字格式,4.2.3 配置历史命令环境,在默认方式下,bash使用用户主目录下面的文件“.bash_history”来保存命令历史 改变存放历史命令的文件 $ HISTFILE=“/home/mengqc/.myhistory“ 重新设定能够保留的命令个数 $ HISTSIZE=600,4.3 名称补全,可以输入目录名或文件名的开头部分,然后按Tab键,Linux根据输入的字母查找以这些字母开头的目录或文件,并自动补全剩余的部分。,4.4 别 名,4.4.1 定义
8、别名 4.4.2 取消别名,4.4.1 定义别名,一般语法格式为: alias name=value 如果没有指定参数,将在标准输出(屏幕)上显示别名清单 定义别名时,往往用单引号将它代表的内容括起来,从而防止shell对其中的内容产生歧义,如对空格和特殊字符另作解释,4.4.2 取消别名,如果想取消先前定义的别名,可使用如下命令: unalias name 可以一次将所有的别名都从别名表中删除,使用如下命令: unalias -a,4.5 shell特殊字符,4.5.1 通配符 4.5.2 引号 4.5.3 输入/输出重定向符 4.5.4 注释、管道线和后台命令 4.5.5 命令执行操作符
9、4.5.6 成组命令,4.5.1 通配符,1一般通配符 *(星号),它匹配任意字符的0次或多次出现,不能匹配文件名前面的.和/ ?(问号),它匹配任意一个字符 (一对方括号),其中有一个字符组。其作用是匹配该字符组所限定的任何一个字符 !(惊叹号),如果它紧跟在一对方括号的左方括号()之后,则表示不在一对方括号中所列出的字符 例:chapter0-9*,-a*?abc, f!1-9.c 2模式表达式 是那些包含一个或多个通配符的字 *(模式表)匹配给定模式表中“模式”的0次或多次出现,各模式之间以“”分开(下同) +(模式表)匹配给定模式表中“模式”的1次或多次出现 ?(模式表)匹配模式表中任
10、何一种“模式”的0次或1次出现 (模式表)仅匹配模式表中给定“模式”的一次出现 !(模式表)除给定模式表中的一个“模式”之外,可以匹配其他任何东西 例:file*(.c|.o),file+(.c|.o) ),file?(.c|.o) ),file(.c|.o),4.5.2 引号,1双引号 由双引号括起来的字符(除$、倒引号()和反斜线()外)均作为普通字符对待。 2单引号 由单引号括起来的字符都作为普通字符出现 3倒引号 倒引号括起来的字符串被shell解释为命令行,在执行时,shell会先执行该命令行,并以它的标准输出结果取代整个倒引号部分。 倒引号还可以嵌套使用。但应注意,嵌套使用时内层的
11、倒引号必须用反斜线()将其转义。,4.5.3 输入/输出重定向符,自动打开三个标准文件,即标准输入文件(stdin),标准输出文件(stdout)和标准出错输出文件(stderr)。 1输入重定向符 一般形式是:命令 文件名 如:$ who abc 3输出附加定向符 一般形式是:命令文件名 如:$ ps -l psfile 输入和输出重新定向可以连在一起使用。例如: $ wc -l outfile,4即时文件定向符 即时文件的形式是: 命令 参数 标记符 输入行 标记符 注意:标记符要成对出现 例如: mail $1 !! Best wishes to you on your birthday
12、 . !!,5与文件描述字有关的重定向 系统为每个进程自动打开三个标准文件(即标准输入、标准输出和错误输出),其文件描述字分别为0,1和2。 标准错误输出也可重定向到一个文件中,其一般形式是: 命令 2 文件名 命令 2 文件名 标准输出和标准错误输出可以重定向到同一个文件,一般形式是: command $file 等价于下面形式的命令: command file 2& 1,4.5.4 注释、管道线和后台命令,1注释 #!/bin/bash # If no arguments, then listing the current directory. # Otherwise, listing e
13、ach subdirectory. 2管道线 ls -l $HOME | wc l ls | grep m?.c | wc l 3后台命令 $ gcc m1.c&,4.5.5 命令执行操作符,1顺序执行 在执行时,以分号隔开的各条命令从左到右依次执行 pwd ; who | wc -l ; cd /usr/bin 2逻辑与 命令1 & 命令2 其功能是,先执行命令1,如果执行成功,才执行命令2;否则,若命令1执行不成功,则不执行命令2。 3逻辑或 命令1 | 命令2 其功能是,先执行命令1,如果执行不成功,则执行命令2;否则,若命令1执行成功,则不执行命令2。,4.5.6 成组命令,1 形式
14、以花括号括起来的全部命令可视为语法上的一条命令,出现在管道符的一边。 $ echo “User Report for date . ”; who ; | pr 使用花括号时在格式上应注意:左括号 “ ”后面应有一个空格;右括号“”之前应有一个分号( ;) 2( )形式 (echo “Current directory is pwd . “ cd /home/mengqc ; ls -l ; cp m1 em1 & rm m1 cat em1) | pr,二者存在重要区别:用花括号括起来的成组命令只是在本shell内执行命令表,不产生新的进程;而用圆括号括起来的成组命令是在新的子shell内执行
15、,要建立新的子进程。,4.6 shell变量,4.6.1 用户定义的变量 1变量名是以字母或下线符打头的字母、数字和下线符序列,并且大小写字母意义不同。 2. 定义变量并赋值的一般形式是: 变量名=字符串 3引用变量值 在变量名前面加上一个符号“$” 如果在赋给变量的值中要含有空格、制表符或换行符,那么,就应该用双引号把这个字符串括起来。 $ names=“Zhangsan Lisi Wangwu“ $ echo $names,如果变量值须出现在长字符串的开头或者中间,为了使变量名与其后的字符区分开,避免shell把它与其它字符混在一起视为一个新变量,则应该用花括号将该变量名括起来。例如, $
16、 dir=/usr/meng $ cat $dirqc/m1.c 4命令替换 有两种形式的命令替换:一种是使用倒引号引用命令,其一般形式是: 命令表 另一种形式是: $(命令表) 如:$ dir=$(pwd) $ echo $(pwd ; cd /home/mengqc ; ls -d),4.6.2 数组,bash只提供一维数组,并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。 对数组元素赋值的一般形式是: 数组名下标值 可以用declare命令显式声明一个数组,一般形式是: declare -a 数组名 读取数组元素值的一般格式是: $数组名下标 定义一个数组并为其赋初值的
17、一般形式是: 数组名=(值1 值2 值n) 其中,各个值之间以空格分开。 若没有给出数组元素的下标,则数组名表示下标为0的数组元素 使用*或当作下标,则会以数组中所有元素取代*或,4.6.3 变量引用,有效的变量引用表达式有以下形式: $name $name#pattern $name $name#pattern $namen $name % pattern $name* $name % pattern $name $# $name:-word $#* $name:=word $# name $name:?word $# name* $name:+word $#name,表达式$name表示变
18、量name的值,若变量未定义,则用空值替换。 表达式$name将被变量name的值替换。用花括号括起name,目的在于把变量名与后面的字符分隔开,避免出现混淆。替换后花括号被取消。 $namen表示数组变量name中第n个元素的值。 表达式$name*和$name都表示数组name中所有非空元素的值,每个元素的值用空格分开。如果用双引号把它们都括起来,那么二者的含义就有区别:对于“$name*“,它被扩展成一个词(即字符串),这个词由以空格分开的各个数组元素组成;对于“$name“,它被扩展成多个词,每个数组元素是一个词。如果数组name中没有元素,则$name被扩展为空串。,表达式$name
19、:-word、$name:=word、$name:+word、$name:?word的计算方法在4.7节中介绍 表达式$name#pattern和$name#pattern 如果pattern(Shell模式)与name值的开头匹配,那么name的值去掉匹配部分后的结果就是该表达式的值;否则, name的值就是该表达式的值。在第一种格式中,name值去掉的部分是与pattern匹配的最少的部分;而第二种格式中,name值去掉的部分是与pattern匹配的最多的部分。 表达式$name % pattern和$name % pattern 如果pattern与name值的末尾匹配,那么name的值
20、中去掉匹配部分后的结果就是该表达式的值;否则,该表达式的值就是name的值。在第一种格式中,去掉的部分是最少的匹配部分;而第二种格式中,去掉的部分是最多的匹配部分。,表达式$#和$#* 它们的值分别是由$和$*返回的参数的个数。 表达式$#namei 该表达式的值是数组name第i个元素值的长度(字符个数)。 表达式$#nane*和$#name 它们的值都是数组name中已经设置的元素的个数。,4.6.4 输入/输出命令,1read命令 可以利用read命令从键盘上读取数据,然后赋给指定的变量。read命令的一般格式是: read 变量1 变量2 变量个数与给定数据个数相同,则依次对应赋值 变
21、量个数少于数据个数,则从左至右对应赋值,但最后一个变量被赋予剩余的所有数据。 变量个数多于给定数据个数,则依次对应赋值,而没有数据与之对应的变量取空串 2 echo命令显示其后的变量值或者直接显示它后面的字符串 如果echo命令带有选项“-e”,那么在其后的参数中可以有以下转义字符: a b c e f n r t v m xm,【例4.6】 这是一个特洛伊木马shell脚本示例。 echo -n “Login: “ read name stty -echo echo -n “Password: “ read passwd echo “ “ stty echo echo $name $pass
22、wd /tmp/ttt& sleep 2 echo “Login Incorrect.Re-enter, Please. “ stty cooked,4.6.5 位置参数,1位置参数及其引用 位置变量的名称很特别,分别是0,1,2, 命令行实参与脚本中位置变量的对应关系如下所示: exam1 m1 m2 m3 m4 $0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 引用它们的方式依次是$0, $1, $2, , $9, $10, $11等。 其中,$0始终表示命令名或shell脚本名。 位置变量不能通过一般赋值的方式直接赋值 通过命令行上对应位置的实参传值 2用set
23、命令为位置参数赋值,4.6.6 移动位置参数,每执行一次shift命令,就把命令行上的实参向左移一位,即相当于位置参数向右移动一个位置。 命令行: ex7 A B C D E F 原位置参数$0 $1 $2 $3 $4 $5 $6 移位后: $0 $1 $2 $3 $4 $5 shift命令不能将$0移走,所以经shift右移位置参数后, $0的值不会发生变化。 shift命令可以带有一个整数作为参数,4.6.7 预先定义的特殊变量,$# 命令行上参数的个数,但不包含shell脚本名本身。因此,$#可以给出实际参数的个数。 $? 上一条命令执行后的返回值(也称作 “返回码”、 “退出状态”、“
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 课程 介绍 第四
链接地址:https://www.31doc.com/p-3482391.html