Shell编程

Shell的基本概念:Shell就是用户与操作系统内核之间的接口,起着协调用户与系统的一致性和在用户与系统之间进行交互的作用。

Shell的功能
Shell最重要的功能是命令解释,Shell是一个命令解释器;Linux系统中的所有可执行文件都可作为Shell命令来执行。

Shell对命令的解释过程
①Shell首先判断它是否为内置命令,如果是就通过Shell内部的解释器将其解释为系统功能调用并转交给内核执行;
②若是外部命令或实用程序就试图在硬盘中查找该命令并将其调入内存,再将其解释为系统功能调用并转交给内核执行;在查找该命令时分为两种情况:
Ⅰ.用户给出了命令路径,Shell就沿着用户给出的路径查找,若找到则调入内存,若没有则输出提示信息;
Ⅱ.用户没有给出命令的路径,Shell就在环境变量PATH所指定的路径中依次进行查询,若找到则调入内存,若没有找到则输出提示信息。

Shell环境变量
Shell支持具有字符串值的变量;
Shell变量不需要专门的说明语句,通过赋值语句完成变量说明并予以赋值;
在命令行或Shell脚本文件中使用$name的形式引用变量name的值。

Shell变量的定义和引用
变量的赋值语法格式: name = string;name是变量名,它的值就是string,“=”是赋值符号;变量名是以字母或下划线开头的字母、数字和下划线字符序列;
通过在变量名(name)前加$字符(如$name)引用变量的值,引用的结果就是用字符串string代替$name;
在定义变量时,若string中包含空格、制表符和换行符,则string必须用‘ string’或者“ string”的形式,即用单(双)引号将其括起来;双引号内允许变量替换,而单引号内则不可以。

Shell变量的作用域
Shell变量分为局部变量和全局变量:
Ⅰ、局部变量的作用范围仅仅限制在其命令行所在的Shell或Shell脚本文件中;
Ⅱ、全局变量的作用范围则包括本Shell进程及其所有子进程;
Ⅲ、可以使用export 内置命令将局部变量设置为全局变量。
举例:
①在当前Shell中定义变量var1
var1 = Linux
②在当前的Shell中定义变量var2并将其设为全局
var2 = unix
export var2
③引用变量的值
echo $var1
echo $var2
④显示当前Shell的PID
echo $$
⑤调用子Shell,并显示子Shell的PID
bash
echo $$
⑥由于var1没有被export,在子Shell中已无值
echo $var1
⑦由于var2被export,所以在子Shell中仍有值
echo $var2
⑧返回主Shell,并显示变量的值
exit
echo $var1
echo $var2
echo $$

Shell的环境变量
环境变量是指由Shell定义和赋初值的Shell变量,Shell用环境变量来确定查找路径、注册目录、终端类型、终端名称、用户名等;所有环境变量都是全局变量,并可以由用户重新设置;在bash中,设置环境变量用set命令,命令的格式是:set 环境变量 = 变量的值
不加任何参数地直接使用set命令可以显示出用户当前所有环境变量的设置;
在环境变量前面加上$符号,表示引用环境变量的值;
当修改PATH变量时,如将一个路径/tmp加到PATH变量后,应该这样设置:PATH = $PATH:/tmp

Shell中的正则表达式
Ⅰ、grep命令用来在文本文件中查找内容,指定给grep的文本模式叫做“正则表达式”;
Ⅱ、由于正则表达式使用了一些特殊字符,所以所有的正则表达式都必须用单引号括起来;
Ⅲ、正则表达式字符可以包含某些特殊的模式匹配字符:
①句点匹配任意一个字符,相当于shell中的问号;
②紧接句号之后的星号匹配零个或多个任意字符,相当于shell的星号;
③方括号的用法跟shell的一样,只是用^代替了!表示匹配不在指定列表中的字符。

正则表达式匹配字符、量词、控制字符
正则表达式的模式匹配字符
与模糊匹配字符配合使用的量词
正则表达式的控制字符
举例:
①help 匹配保护你help的行;
②\..$ 匹配倒数第二个字符是句点的行;
③^..$ 匹配只有3个字符的行;
④^[0-9]\{3\}[^0-9] 匹配以3个数字开头跟着是一数字字符的行;
⑤^\([A-Z][A-Z]\)*$ 匹配只包含偶数个大写字母行

输入输出重定向与管道
Ⅰ、所谓重定向,就是不使用系统的标准输入端口、标准输出端口或标准错误端口,而进行重新的指定,所以重定向分为输入重定向、输出重定向和错误重定向;
Ⅱ、在shell中,要实现重定向主要依靠重定向符实现,下表列出了常用的重定向符

管道
Ⅰ、许多Linux命令具有过滤特性,即一条命令通过标准输入端口接收一个文件中的数据,命令执行后产生的结果数据又通过标准输出端口送给后一条命令,作为命令的输入数据;
Ⅱ、Shell提供管道命令“|”将这些命令前后衔接在一起,形成一个管道线;格式为:命令1|命令2|...|命令n
Ⅲ、管道线中的每一条命令都作为一个单独的进程运行 ,每一条命令的输出作为下一条命令的输入;由于管道线中的命令总是从左到右顺序执行的,因此管道线是单向的。
管道举例:以长格式递归的方式分屏显示/etc目录下的文件和目录列表 ls -R1 /opt;more

Shell脚本
Ⅰ、Shell最强大的功能在于它是一个功能强大的编程语言;
Ⅱ、用户可以在文件中存放一系列的命令,这被称为Shell脚本或Shell程序,将命令、变量和流程控制有机地结合起来将会得到一个功能强大的编程工具;
Ⅲ、Shell脚本语言非常擅长处理文本类型的数据,由于Linux系统中的所有配置文件都是纯文本的,所以Shell脚本语言在管理LInux系统中发挥了巨大作用。
Ⅳ、Shell脚本是以行为单位的,在执行脚本的时候会分解成一行一行依次执行;脚本中所包含的成分主要有注释、命令、Shell变量和结构控制语句,其中:
①注释:用来对脚本进行解释和说明,在注释行的前面加上符号“#”,这样在执行脚本的时候Shell就不会对该行进行解释;
②命令:在Shell脚本中可以出现任何交互方式下可以使用的命令;
③变量:Shell支持具有字符串值的变量,Shell变量不需要专门的说明语句,通过赋值语句完成变量说明并予以赋值;在命令行或Shell脚本文件中使用$name的形式引用变量name的值;
④流程控制:主要为一些用于流程控制的内部命令。

Shell脚本的流程控制

脚本的建立与执行
Ⅰ、用户可以使用任何文本编辑器编辑Shell脚本文件,如vi、gedit等;
Ⅱ、Shell对Shell脚本文件的调用可以采用3种方式:
①一种是将文件名作为Shell命令的参数,其调用格式为:Bash script_file
②另一种调用方法是将脚本文件的访问权限改为可执行,以便该文件可以作为执行文件调用:
chmod +x script_file
PATH = $PATH:$PWD
script_file
③当执行一个脚本文件时,Shell就产生一个子Shell(即一个子进程)去执行文件中的命令;因此,脚本文件中的变量值不能传递到当前Shell(即父进程);为了使子进程的脚本文件中的变量值传递到当前Shell,必须在命令文件名前面加“.”命令:
. ./script_file
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值