实验目的&要求:
1、 掌握shell的基本命令
2、 掌握shell的基本概念和作用
3、 掌握shell环境变量概念和使用方法
4、 掌握shell程序的结构和设计方法
预备知识:
shell的概念和功能
shell的基本概念:
shell就是用户于操作系统内核之间的接口,起着协调用户于系统的一致性和在用户于系统之间进行交互的作用。shell在linux系统中具有极其重要的地位。
shell的功能
shell最重要的功能是命令解释,从这种意义上来说,shell是一个命令解释器。linux系统中的所有可执行文件都可以作为shell命令来执行。将可执行文件作一个分类:
linux命令:存放在/bin、/sbin目录下
内置命令:出于效率的考虑,将一些常用命令的解释程序构造的shell内部
实用程序:存放在/usr/bin、/usr/sbin、/usr/local/bin等目录下的实用程序
用户程序:用户程序经过编译生成可执行文件后,也可作为shell命令运行
shell脚本:由shell语言编写的批处理文件
shell对命令的解释过程
当用户提交了一个命令行,shell首先判断它是否为内置命令,如果是就通过shell内部的解释器将其解释为系统功能调用并转交给内核执行。
若是外部命令或实用程序就试图在硬盘中查找该命令并将其调入内存,再将其解释为系统功能调用并转交给内核执行。在查找该命令时分为两种情况:
- 用户给出了命令路径,shell就沿着用户给出的路径查找,若找到则调入内存,若没有则输出提示信息;
- 用户没有给出命令的路径,shell就在环境变量PATH所制定的路径中依次进行查找,若找到则调入内存,若没找到则输出提示信息。
shell的主要版本:
- Bourne Again Shell(bash的扩展):Bash是大多数linux系统的默认shell。bash与bsh完全向后兼容,并且在bsh的基础上增加了很多特性。bash也包含了很多C shell和Kom shell中的优点。Bash有很灵活和强大的编程接口。同时又有很友好的用户界面。
- Korn Shell(ksh):Korn Shell(ksh)由Dave Korn所写。它是UNIX系统上的标准shell。另外,在linux环境下有一个专门为linux系统编写的Korn shell的扩展版本,即Public Domain Korn Shell<pdksh>
- tcsh(csh扩展):tcsh是C、Shell的扩展。tcsh与csh完全向后兼容,但它包含了更多的使用户感觉方便的新特性,其最大的提高是在命令行编辑和历史浏览方面。
shell环境变量
shell支持具有字符串的变量。
shell变量不需要专门的说明语句,通过赋值语句完成变量说明并予以赋值。
在命令行或Shell脚本文件中使用$name的形式引用变量name的值。
shell变量的定义和引用
在shell中,变量的赋值有下列句法格式:name=string;
name是变量名,它的值就是string,“=”是赋值符号。变量名是以字母或下划线开头的字母、数字和下划线字符序列。
通过在变量名(name)前加$字符(如$name)引用变量的值,引用的结果就是用字符串string代替$name。
在定义变量时,若string中包含空格、制表符和换行符,则string必须用'string'或者“string”的形式,即用单引号将其括起来。双引号内允许变量替换,而单引号内则不可以。
Shell变量的作用域
与程序设计语言中的变量一样,shell变量有其规定的作用范围。
Shell变量分为局部变量和全局变量:
局部变量的作用范围仅仅限制在其命令行所在的shell或shell脚本文件中
全局变量的作用范围则包含本shell进程及其所有子进程
可以使用export内置命令将局部变量设置为全局变量
Shell的环境变量
环境变量是指由shell定义和赋初值的Shell变量。
Shell用环境变量来确定查找路径、注册目录、终端类型、终端名称、用户名等。
所有环境变量都是全局变量,并可以由用户重新设置。
在Bahs中,设置环境变量用set命令,命令的格式是:set 环境变量=变量的值
shell中的正则表达式
grep命令用来在文本文件中查找内容,指定给grep的文本模式叫做“正则表达式”。
正则表达式可以是普通的字母或者数字,也可以使用特殊字符来匹配不同的文本模式。
由于正则表达式使用了一些特殊字符,所以所有的政策表达式都必须用单引号括起来。
正则表达式字符可以包含某些特殊的模式匹配字符。
句点匹配任意一个字符,相当于shell中的问号
紧接句号之后是星号匹配零个或多个任意字符,相当于shell的星号
方法号的用法跟shell的一样,只是用^代替了
!表示匹配不在指定列表内的字符
所谓重定向,就是不使用系统的标准输入端口、标准输出端口或标准错误端口,而进行重新的指定,所以重定向分为输入重定向、输出重定向和错误重定向
在Shell中,要实现重定向主要依靠重定向符实现 。
许多Linux命令具有过滤特性,即一条命令通过标准输入端口接收一个文件中的数据,命令执行后产生的结果数据又通过标准输出端口送给后一条命令,作为该命令的输入数据。
Shell提供管道命令“|”将这些命令前后衔接在一起,形成一个管道线。格式为:命令1|命令2|……|命令n
管道线中的每一条命令都作为一个单独的进程运行,每一条命令的输出作为下一条命令的输入。由于管道线中的命令总是从左到右顺序执行的,因此管道线是单向的。
Shell脚本
Shell最强大的功能在于它是一个功能强大的编程语言。
用户可以在文件中存放一系列的命令,这被称为Shell脚本或Shell程序,将命令、变量和流程控制有机地结合起来将会得到一个功能强大的编程工具。
Shell脚本语言非常擅长处理文本类型的数据,由于Linux系统中的所有配置文件都是纯文本的,所以Shell脚本语言在管理Linux系统中发挥了巨大作用。
Shell脚本是以行为单位的,在执行脚本的时候会分解成一行一行依次执行。脚本中所包含的成分主要有注释、命令、Shell变量和结构控制语句。其中:
- 注释:用于对脚本进行解释和说明,在注释行的前面要加上符号“#”,这样在执行脚本的时候Shell就不会对该行进行解释。
- 命令:在Shell脚本中可以出现任何在交互方式下可以使用的命令。
- 变量:Shell支持具有字符串值的变量。Shell变量不需要专门的说明语句,通过赋值语句完成变量说明并予以赋值。在命令行或Shell脚本文件中使用$name的形式引用变量name的值。
- 流程控制:主要为一些用于流程控制的内部命令。
实验内容
1、掌握shell的基本命令
2、掌握shell的基本概念和作用
3、掌握shell环境变量概念和使用方法
4、掌握shell程序的结构和设计方法
实验过程:
1. 常见shell的切换。如图所示:
2. 查看我们系统中有哪些shell,可以使用命令:cat /etc/shells。如图所示
3. 查看我们系统中有哪些shell,可以使用命令:cat /etc/shells。如图所示
注:这就是我们系统中所有的shell,不过我们一般使用的是第二种,/bin/bash。
4. 一个用户使用什么shell,可以在/etc/passwd中查看。如图所示:
注:最后那一项就是我们使用的shell,其中nologin是个特殊的shell。
5. 在linux里有很多的变量,大致可分为3种:环境变量、内部变量、用户变量。用户可以通过这些变量获得系统、环境的信息。
6. 用户可以用set或env查询当前的环境变量。如图所示:
7. 常见的预定义变量:
HOME:当前用户的主目录
PATH:当前用户的可执行文件搜索路径
LANG:程序应该使用的默认语言
8. 使用echo $变量名字 来查看变量。如图所示:
echo $PATH 这是可执行程序的搜索路径
echo $LANG 当前语系
echo $HOME 当前语系
9. 用户变量是用户在编写shell过程中,可以在shell程序内任意使用和修改的变量。(以字母或下划线开头,通常字母是大写字母)。赋值:变量名=变量值,获取变量值 ${变量名}。例:test=hello。(先重新返回到bash)如图所示:
输入输出重定向与管道
所谓重定向,就是不使用系统的标准输入端口、标准输出端口或标准错误端口、而进行重新的指定,所以重定向分为输入重定向、输出重定向和错误重定向。
1. 输入输出重定向举例,如图所示希望大家能看出他的意义。如图所示:
2. Shell提供管道命令“|”将这些命令前后衔接在一起,形成一个管道线。格式为:命令1|命令2|……|命令n.管道线中的每一条命令都作为一个单独的进程运行,每一条命令的输出作为下一条命令的输入。由于管道线中的命令总是从左到右顺序执行的,因此管道线是单向的。
3. 管道举例。以长格式递归的方式分屏显示/etc目录下面的文件盒目录列表。如图所示
实验结束~