学习笔记3

关于知识点

知识点归纳

第十章

  • 10.1 sh脚本
    sh脚本是一个包含sh语句的文本文件,命令解释程序sh要执行该语句。
  • 10.2 sh脚本与C程序
    Shell脚本(sh脚本)和C程序是两种不同的编程语言和编程环境,它们有各自的特点和应用场景。
    • Shell脚本(sh脚本):
  1. 脚本语言:Shell脚本是一种脚本语言,通常用于执行一系列操作,如文件操作、进程控制、系统管理等;
  2. 解释性语言:Shell脚本是解释性语言,代码逐行执行,无需编译过程;
  3. 脚本文件:通常以.sh作为文件扩展名,可以通过chmod命令添加执行权限后直接运行;
  4. 环境变量:Shell脚本可以访问和修改环境变量,这对于配置和自定义环境非常有用;
  5. 流程控制:支持条件语句(if-else)、循环语句(for、while)、函数定义等基本的流程控制结构;
  6. 管道和重定向:Shell脚本允许使用管道操作符(|)和重定向符号(>、<)来处理输入和输出;
  7. 内置命令:Shell脚本有许多内置命令,如echo、ls、grep等,用于执行常见的操作;
  8. 脚本的用途:用于自动化任务、系统管理、日常操作等,特别适用于Linux和Unix系统;
    • C程序:
  9. 编译型语言:C是一种编译型语言,需要通过编译器将源代码编译成可执行文件,然后才能运行;
  10. 静态类型语言:C是一种静态类型语言,需要在编写代码时显式声明变量的数据类型;
  11. 高性能:C语言通常用于编写高性能的系统级程序,如操作系统、驱动程序和嵌入式系统;
  12. 指针:C语言具有强大的指针支持,允许直接操作内存地址,但也容易引发内存管理问题;
  13. 库函数:C语言提供了丰富的标准库函数,用于执行各种任务,如字符串处理、文件操作等;
  14. 跨平台:C语言可以编写跨平台的程序,只需对不同平台进行少量调整即可;
  15. 多线程支持:C语言支持多线程编程,使其适用于并发和并行编程;
  16. 系统编程:常用于开发操作系统、设备驱动程序、网络协议等低层次的系统软件;
    总的来说,Shell脚本主要用于自动化任务和系统管理,适合处理高级系统命令和文本操作,而C语言通常用于开发高性能、系统级别的应用程序,需要更多的底层控制和内存管理。选择使用哪种语言取决于具体的需求和应用场景。
  • 10.3 命令行参数
    • $# = 命令行参数$1到$n的数量
    • $* = 所有命令行参数,包括$0
    • $S = 执行sh的进程PID
    • $?= 最后一个命令执行的退出状态(如果成功则为0,否则为非0)
  • 10.4 sh变量
  • 10.5 sh中的引号
  • 10.6 sh语句
  • 10.7 sh命令
    • 内置命令
    • Linux命令
  • 10.8 命令替换
  • 10.9 sh控制语句
    • 10.9.1 if-else-if语句
      在sh(Shell)脚本中,if-else-if语句用于根据不同条件执行不同的代码块。
  1. 基本语法:if-else-if语句的基本语法如下:
if [ condition1 ]; then
   # 执行代码块1
elif [ condition2 ]; then
   # 执行代码块2
elif [ condition3 ]; then
   # 执行代码块3
else
   # 执行默认代码块
fi
  1. 条件判断:条件表达式使用方括号[]将条件包含起来,并在方括号之间使用运算符进行逻辑判断。常见的条件运算符包括等于(-eq)、不等于(-ne)、大于(-gt)、小于(-lt)、大于等于(-ge)、小于等于(-le)等。

  2. 代码块:每个条件都对应一个代码块,其中包含要执行的命令或操作。代码块通常由缩进表示,并在条件之后使用then关键字开始。

  3. 多个条件:if-else-if语句可以包含多个条件和对应的代码块。条件按照从上到下的顺序进行匹配,只有第一个匹配的条件的代码块将被执行。

  4. else语句:如果所有条件都不满足,则可以在if-else-if语句的末尾添加一个else代码块。该代码块表示默认情况下要执行的代码。

  5. 嵌套语句:if-else-if语句可以嵌套在其他if-else-if语句或循环语句中。这允许更复杂的逻辑和条件判断。

  6. 注释:在代码块中可以使用注释来提供关于代码功能和用途的说明。注释以#开头,并在行末尾结束。

  7. 退出状态码:根据每个代码块的执行结果,if-else-if语句可以返回不同的退出状态码,用于指示脚本的执行结果。

    • 10.9.2 for语句
      在sh(Shell)脚本中,for语句用于循环遍历一组元素或执行一系列操作。
  8. 基本语法:for语句的基本语法如下:

for variable in element1 element2 element3 ...; do
    # 执行循环中的代码块
done

其中,variable是一个变量,用于依次存储循环中的每个元素,element1 element2 element3 ...是要遍历的元素列表。
2. 元素列表:元素列表可以包含一系列的字符串、数字、文件名等元素,用空格或其他分隔符分隔开。for循环会依次将列表中的元素赋值给变量,并执行相应的代码块。
3. 代码块:在for循环中,每次迭代都会执行一个代码块,该代码块通常由缩进表示。我们可以在代码块中执行任意操作,包括条件判断、命令执行等。
4. 遍历文件列表:常见用途之一是遍历文件列表。例如,可以使用通配符(如*)来匹配一组文件,然后在for循环中处理这些文件。
5. 计数循环:除了遍历元素列表,for循环还可以用于创建计数循环。可以使用seq命令生成数字序列,然后在for循环中使用这些数字。
6. 循环控制:在循环中,可以使用break语句提前退出循环,或者使用continue语句跳过当前迭代,继续下一次迭代。
7. 嵌套循环:我们可以在一个循环内嵌套另一个循环,以实现更复杂的控制逻辑。例如,在外部循环中遍历文件列表,在内部循环中处理每个文件的内容。
8. 变量使用:在for循环中,可以使用$variable来引用当前迭代中的元素。这允许我们在代码块中使用该元素的值。
for语句是sh脚本中用于循环遍历元素列表或执行计数循环的关键工具。它使得脚本编写和数据处理更加灵活和自动化。

- 10.9.3 while语句

在sh(Shell)脚本中,while语句用于创建一个循环,只要指定的条件为真,就会重复执行一系列操作。

  1. 基本语法:while语句的基本语法如下:
while [ condition ]; do
    # 执行循环中的代码块
done

其中,condition是一个用于判断是否继续循环的条件表达式。只要条件为真,循环就会继续执行,直到条件为假。
2. 条件判断:条件表达式使用方括号[]将条件包含起来,并在方括号之间使用运算符进行逻辑判断。常见的条件运算符包括等于(-eq)、不等于(-ne)、大于(-gt)、小于(-lt)、大于等于(-ge)、小于等于(-le)等。
3. 代码块:在while循环中,只要条件为真,就会反复执行一个代码块,该代码块通常由缩进表示。您可以在代码块中执行任意操作,包括条件判断、命令执行等。
4. 循环控制:在循环中,可以使用break语句提前退出循环,或者使用continue语句跳过当前迭代,继续下一次迭代。
5. 条件更新:在循环中,通常需要在代码块中更新条件,以便最终条件为假,循环能够结束。如果不更新条件,可能会导致无限循环。
6. 嵌套循环:我们可以在一个循环内嵌套另一个循环,以实现更复杂的控制逻辑。这允许我们创建嵌套的循环结构。
7. 无限循环:有时,当我们希望创建一个无限循环,以等待某些条件的发生,这可以通过设置条件始终为真来实现。
8. 变量使用:在while循环中,我们可以使用$variable来引用当前迭代中的元素。这允许我们在代码块中使用该元素的值。

- 10.9.4 until-do语句

在sh(Shell)脚本中,until-do语句用于复执行一系列操作,直到指的条件为真。与while-do语句不,until-do循环在条件为假时执行,直到条件变为真才停止循环。

  1. 基本语法:until-do语句的基本语法如:
until [ condition ]; do
    # 执行循环中的代码块
done

其中,condition是一个用于判断是否继续循环的条件表达式。只要条件为假,循环就会继续执行,直到条件为真。
2. 条件判断:条件表达式使用方括号[]将条件包含起来,并在方括号之间使用运算符进行逻辑判断。常见的条件运算符包括等于(-eq)、不等于(-ne)、大于(-gt)、小于(-lt)、大于等于(-ge)、小于等于(-le)等。
3. 代码块:在until循环中,只要条件为假,就会反复执行一个代码块,该代码块通常由缩进表示。我们可以在代码块中执行任意操作,包括条件判断、命令执行等。
4. 循环控制:在循环中,可以使用break语句提前退出循环,或者使用continue语句跳过当前迭代,继续下一次迭代。
5. 条件更新:在循环中,通常需要在代码块中更新条件,以便最终条件为真,循环能够结束。如果不更新条件,可能会导致无限循环。
6. 嵌套循环:我们可以在一个循环内嵌套另一个循环,以实现更复杂的控制逻辑。这允许我们创建嵌套的循环结构。
7. 无限循环:有时,当我们希望创建一个无限循环,以等待某些条件的发生,这可以通过设置条件始终为假来实现。
总之,until-do语句是sh脚本中用于创建循环的关键工具,它使得可以根据条件反复执行一系列操作,直到条件变为真为止。掌握until-do语句可以帮助您更灵活地编写Shell脚本。

- 10.9.5 case语句

在sh(Shell)脚本中,case语句用于根据不同的选项或值执行相应的代码块。

  1. 基本语法:case语句的基本语法如下:
case expression in
    pattern1)
        # 执行代码块1
        ;;
    pattern2)
        # 执行代码块2
        ;;
    pattern3)
        # 执行代码块3
        ;;
    *)
        # 执行默认代码块
        ;;
esac

在这里,expression是待匹配的表达式或变量,pattern1pattern2等是用于匹配expression的模式,;;用于结束每个模式下的代码块,*)表示默认匹配。
2. 模式匹配:case语句中的模式使用通配符来匹配expression的值。通配符可以是*(匹配任意字符)、?(匹配任意单个字符)和[...](匹配字符集合中的任意一个字符)。
3. 代码块:每个模式匹配都对应一个代码块,其中包含要执行的命令或操作。代码块通常由缩进表示,并使用;;在每个模式下结束。
4. 多个模式:case语句可以包含多个模式和对应的代码块。当expression与某个模式匹配时,会执行相应的代码块,并且只有第一个匹配的模式将被执行。
5. 默认模式:如果expression与所有模式都不匹配,可以使用*)模式来指定默认的匹配情况。这通常用于处理未匹配的情况。
6. 逻辑操作:在每个模式中,可以使用|运算符进行逻辑或操作,允许多个模式共享相同的代码块。
7. 嵌套case:我们可以在一个case语句内部嵌套另一个case语句,以实现更复杂的控制逻辑。这允许创建嵌套的case结构。
8. 变量使用:在case语句中,可以使用$variable来引用expression的值。这允许在代码块中使用该值。

- 10.9.6 continue和break语句

在sh(Shell)脚本中,continue和break语句用于在循环中控制流程的执行。

  1. continue语句:continue语句用于跳过当前迭代中的剩余代码,直接进入下一次迭代。当遇到continue时,循环会立即跳到下一次迭代的起始处。
  2. break语句:break语句用于完全结束循环的执行。当遇到break时,循环会立即终止,不再执行剩余的代码,并跳出循环。
  3. 在循环中使用:continue和break语句通常用于循环结构(如for、while和until)。在循环中,根据具体的需求,可以使用continue来跳过某些迭代,或者使用break来提前结束循环。
  4. 嵌套循环中的控制:在嵌套循环中,continue和break语句通常用于控制内部循环的执行。使用continue语句可以跳过当前迭代并进入下一次迭代,而使用break语句可以完全退出内部循环。
  5. 循环控制的条件判断:通常,continue和break语句结合使用特定的条件判断语句来实现循环控制。根据条件的满足与否,使用continue来继续循环或使用break来提前结束循环。
  6. 适用于不同的循环类型:continue和break语句可以在for、while和until等循环中使用。无论是计数循环、条件循环还是无限循环,这两个语句都适用。
  7. 多层循环中的控制:当有多层嵌套循环时,continue和break语句可以在内层循环中影响外层循环的执行。通过控制内层循环的执行流程,可以实现对外层循环的控制。
  • 10.10 I/O重定向
  • 10.11 嵌入文档
  • 10.12 sh函数
  • 10.13 sh中的通配符
  • 10.14 命令分组
  • 10.15 eval语句

苏格拉底挑战

问题1:

问题2:

遇到问题以及实践过程截图

实践截图

问题1:


posted @ 2023-09-24 09:37  20211403左颖  阅读(9)  评论(0编辑  收藏  举报