学习笔记3

第10章 sh编程

一、知识点总结

1. sh脚本

sh脚本是一个包含sh语句的文本文件,命令解释程序sh要执行该语句。
image

实践过程:
image
image

2. sh脚本与C程序

  • sh是一个解释程序,逐行读取sh脚本文件并直接执行这些行;C程序必须先编译链接到一个二进制可执行文件
  • 在sh脚本中,每个变量都是字符串;在C程序中,每个变量必须有一个类型
  • 在sh脚本中,第一个可执行语句是程序的入口点(不需要main函数);每个C程序必须有一个main()函数

3. 命令行参数

  • 可使用与运行sh命令完全相同的参数调用sh脚本
  • 在sh脚本中,可以通过位置参数访问命令行参数

实践过程:
image
image

4. sh变量

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

实践过程:
image
image

5. sh中的引号

  • \用于引用单个字符,单引号用于引用长字符串。
  • 单引号内没有替换;双引号用于保留双引号字符串中的空格,但在双引号内会发生替换。

实践过程:
image
image

6. sh语句

sh语句包括所有Unix/Linux命令,以及可能的I/O重定向。
sh编程语言支持控制sh程序执行的测试条件、循环、case等语句。

实践过程:
image
image

7. sh命令

  1. 内置命令
    实践过程(以read命令为例):
    image
    image

  2. Linux命令
    实践过程:
    ①echo命令:
    image
    image
    ②expr命令:
    image
    image

8. 命令替换

  • $A会被替换为A值
  • 当sh遇到'cmd'或$(cmd)时,会先执行cmd,然后用执行的结果字符串替换$(cmd)

实践过程:
image
image

9. sh控制语句

  1. if-else-fi语句
    每个语句必须在单独的一行上。但如果多个语句之间用分号分开,则sh允许多个语句在同一行。
    左括号“[”是一个测试程序。运算符-eq、-ne 、-lt、-gt等将参数作为整数进行比较。测试程序还可以测试文件类型和文件属性。
    if-elif-else-fi复合语句:类似于C语言中的if-else if-else。
    复合条件:必须用一对匹配的双括号 [[ 和 ]] 括起来。

  2. for语句
    作用类似于C语言中的for循环。

实践过程:
image
image

  1. while语句
    作用类似于C语言中的while循环。

实践过程:
image
image

  1. until-do语句
    类似于C语言中的do-until语句。

实践过程:
教材上的代码有误
image
image
询问ChatGPT解决:
image
修改后:
image
image

  1. case语句
    类似于C语言的case语句。

  2. continue和break语句
    工作原理与在C语言中完全相同。

10. I/O重定向

'>file' stdout转向文件,如果文件不存在,将会创建文件。
'>>file' stdout追加到文件。
'<file' 将文件用作stdin;文件必须存在并具有r权限
'<<word' 从“here”文件中获取输入,直到只包含“word”的行。

11. 嵌入文档

可以指示输出命令从stdin获取输入,将其回显到stdout,直到遇到预先安排的关键字。这些文档通常被称为嵌入文档。通常用在sh脚本中,以生成长块的描述性文本,不需要分别回显每一行。

12. sh函数

实践过程:
使用教材上代码出现错误:
image
image
问题:使用if-else-fi语句时没有使用fi,语句使用错误。
修改后:
image
image

13. sh中的通配符

  • 星号通配符:最有用,可扩展到当前目录中的所有文件。
  • ?通配符:查询某文件名中的字符。
  • []通配符:查询文件名中一对[]中的字符。

14. 命令分组

可以用{}或()对命令进行分组。

  • {}命令分组的唯一用处是在相对环境下执行这些命令。
  • ()命令分组是通过subsh进程执行()中的命令。

15. eval语句

(1)参数替换
(2)命令替换
(3)通配符扩展

16. 调试sh脚本

e.g. bash -x mysh

17. sh脚本的应用

最常用于执行涉及冗长命令序列的常规作业。

二、ChatGPT提问

image

三、总结

总结一下一门程序设计语言有哪些必备的要素和技能?这些要素和技能在shell脚本中是如果呈现出来的?
要素:

  1. 变量和数据类型:在任何编程语言中都需要能够存储和操作数据。在shell脚本中,变量为字符串类型。
  2. 条件语句和循环语句。shell脚本中与C语言类似。
  3. 函数:函数允许组织和复用代码。在shell脚本中,也可以定义函数。

技能:

  1. 问题解决能力:编程本质上是一种问题解决活动。在shell脚本中,这种技能主要体现在脚本的设计和实现过程中。
  2. 编程语言知识:对于shell脚本来说,需要了解其语法、数据类型、控制结构、函数、错误处理等基本概念和特性。
  3. 调试技能:编写代码时难免会出现错误,因此需要具备调试技能,以便找出并修复这些错误。在shell脚本中,调试技能同样重要,可以使用echo、printf等命令或设陷阱(trap)等方法进行调试。
  4. 学习能力:由于编程技术和工具不断发展,需要具备终身学习的能力。在shell脚本中,虽然其语法相对简单,但也需要不断学习和掌握新的特性和技巧。
posted @ 2023-09-24 17:48  20211116彭玮琪  阅读(27)  评论(0)    收藏  举报