第十章学习笔记

第十章:sh编程

摘要:

本章讨论了sh编程,阐述了sh脚本和不同版本的h;比较了sh脚本与C程序,并指出了解释语言和编译语言的区别;详细说明了如何编写s脚本,
包括sh变量、sh语句、sh内置命令、常规系统命令和命令替换;解释了sh控制语,其中包括测试条件、for循环、while循环、do- untill 循环、case语句等,
并示范了它们的用法;说明了如何编写sh函数以及使用参数调用sh函数;还举例说明了sh脚本的广泛应用,包括 Linux系统的安装、初始化和管理。

学到了什么?

1.sh脚本

sh脚本是一个包含sh语句的文本文件,命令解释程序sh要执行该语句使用 chmod+ x mysh使其可执行。
然后运行 mysh. sh脚本的第一行通常以#!组合开始,通常称为 shebang。
当主sh见到 shebang I时,会读取脚本所针对的程序名并调用该程序。
sh有许多不同的版本,例如 Linux的bash、 BSD Unix的csh和 I IBM AIX的ksh等。
所有sh程序基本上都执行相同的任务,但它们的脚本在语法上略有不同。
shebang允许主sh调用适当版本的sh来执行脚本。
如果未指定 shebang,它将运行默认的sh,即 Linux中的 bin/bash当bash执行mysh脚本时,将会打印hello

2.sh脚本与C程序

sh脚本和C程序有一些相似之处,但它们在根上是不同的。

首先,sh是一个解释程序,逐行读取sh脚本文件并直接执行这些行。如果行是可执行

命令且为内置命令,那么sh可直接执行。否则,它会复刻一个子进程来执行命令,并等待

子进程终止后再继续,这与它执行单个命令行完全一样。

相反,C程序必须先编译链接到一个二进制可执行文件,然后通过主sh的子进程运行二进制执行文件。
其次,在C程序中,每个变量必须有一个类型,例如char、int、flat、生类型(如 I struct))等。相反,在sh脚本中,每个变量都是字符串。因此不需要类型,因为只有一种类型,即字符串。

最后,每个C程序必须有一个main(函数,每个函数必须定义一个返回值类型和参数(如有)。相反,sh脚本不需要main函数。在sh脚本中,第一个可执行语句是程序的入口点。

3.命令行参数

可使用与运行sh命令完全相同的参数调用sh脚本,如:

sh one two thre

在sh脚本中,可以通过位置参数$、$1、S2等访问命令行参数。前10个命令行参数可以

作为$0~$9被访问。其他参数必须称为$10}-S{n},其中n>10。或者,可以通过稍后显示的 shift f命令查看它们。

通常,O是程序名本身,S1到n是程序的参数。在sh中,可用内置变量 $ #和$*计数并显示命令行参数。

$#=命令行参数$1到Sn的数量

*=所有命令行参数,包括$O

此外,sh还有与命令执行相关的以下内置变量。

SS=执行sh的进程PID

S?=最后一个命令执行的退出状态(如果成功,则为0,否则为非0)

4.sh变量

sh有许多内置变量,如PATH、HOME、TERM等除了内置变量外,用户还可使用任何符号作为sh变量。不需要声明。所有的sh变量值都是字符串。未赋值的sh变量是NULL字符串。

5.sh命令

sh有许多内置命令,这些命令由sh执行,不需要创建一个新进程。下面列出一些常用

的内置sh命令。

  • file:读取并执行文件。

  • break[n]:从最近的第n个嵌套循环中退出。

  • cd (dirname]:更换目录

  • continue[n]:重启最近的第n个嵌套循环。

  • eval [arg.]:计算一次参数并让sh执行生成的命令。

  • exec[arg]:通过这个sh执行命令,sh将会退出。

  • exit[n]:使sh退出,退出状态为n。

  • export [var]:将变量导出到随后执行的命令。

  • read [var.]:从 A stdin中读取一行并为变量赋值。

  • set arg]:在执行环境中设置变量。

  • shift:将位置参数$2$3.重命名为$1$2.…

  • p[ arg ][ n ]:接收到信号n后执行参数。

  • umask [ddd]:将掩码设置为八进制数dd的

  • wait[pid]:等待进程pid,如果没有给出pid,则等待所有活动子进程。

6.Linux命令

sh可以执行所有的 Linux命令。其中,有些命令几乎已经成为sh不可分割的一部分,

因为它们广泛用于sh脚本中。下文列出并解释了其中一些命令。

  • eho命令:echo只是将参数字符串作为行回显到 stdout。它通常将相邻的多个空格压缩为一个空格,除非有引号。

  • 实用命令:除了上面的 Linux命令之外,sh还用许多其他实用程序作为命令。其中包括:

    awk:数据处理程序。
    
    cmp:比较两个文件。
    
    comm:选择两个排序文件共有的行。
    
    grep:匹配一系列文件的模式
    
    diff:找出两个文件的差异。
    
    join:通过使用相同的键来连接记录以比较两个文件。
    
    sed:流或行编辑命令。
    
    sort:排序或合并文件。
    
    tail:打印某个文件的最后n行。
    
    tr:一对一字符翻译。
    
    uniq:从文件中删除连续重复行。
    

7.命令替换、sh控制语句、if-else-fi语句、for语句等、while语句、until-do语句、case语句、continue和break语句、I/O重定向、嵌入文档、sh函数等。

8.sh中的通配符:

*:扩展到当前目录中的所有文件

?:查询某文件名中的字符

[]:查询文件名中一对[]中的字符

9.命令分组:使用{}或()对命令进行分组

10.eval语句:eval是sh的一个内置命令。它由sh自己执行,而不需要复刻新进程。它将输入参数字符串连接到一个字符串中,计算一次,即执行变量和命令替换,然后给出结果字符串供sh执行。

11.调试sh脚本,可以通过-x这一选项的子sh运行,以进行调试。

posted @ 2021-09-26 11:13  李业达  阅读(36)  评论(0编辑  收藏  举报