信息安全系统设计与实现课程第十章学习笔记

一、知识点总结

1、sh脚本

sh脚本是一种文本文件,包含一系列sh语句,用于执行一系列命令。它是一种脚本语言,通常以.sh为文件扩展名。脚本的执行需要使用shell解释器,比如Bash、csh、ksh等。脚本的基本结构如下:

#!/bin/bash
# This is a comment
echo "Hello, World!"

在这个示例中,#!/bin/bash指定了解释器为Bash,echo命令用于输出文本。脚本需要通过chmod +x script.sh命令赋予执行权限,然后可以运行它。

2、sh脚本与C程序

sh脚本和C程序在语法和执行方式上有明显的不同。sh脚本是解释型语言,逐行执行,而C程序需要编译成机器码。C程序的变量需要声明类型,而sh脚本中的变量都是字符串。此外,sh脚本无需主函数(如C中的main函数),脚本的入口点是第一个可执行语句。

3、命令行参数

sh脚本可以接受命令行参数,这些参数可以在脚本内部使用。例如,运行脚本时可以这样传递参数:

./myscript.sh arg1 arg2 arg3

在脚本内部,可以使用$0表示脚本名称,$1$2$3等表示命令行参数。还可以使用特殊变量$#表示参数的数量,$*表示所有参数,$$表示当前脚本的进程ID,$?表示上一个命令的退出状态。

4、sh变量

sh脚本中存在内置变量(如PATHHOMETERM等),同时用户也可以自定义变量。变量在sh脚本中无需声明类型,它们都是字符串类型。如果一个变量未被赋值,那么它的值为空字符串。

5、sh中的引号

在sh脚本中,引号用于引用特殊字符。有三种主要类型的引号:单引号(')、双引号(")和反引号(反撇号,``)。

  • 单引号:单引号内的字符会被视为字面值,不会进行任何替换。例如:echo 'Hello $USER'会输出文本Hello $USER

  • 双引号:双引号内的变量会被替换为其值,同时允许转义字符的使用。例如:echo "Hello $USER"会输出文本Hello <当前用户>

  • 反引号:反引号用于执行命令,并将其结果嵌入到字符串中。例如:echo "Today is $(date)"会输出当前日期。

6、sh语句

sh脚本中可以包含各种Unix/Linux命令,例如文件操作、文本处理、进程管理等。此外,还支持I/O重定向和管道操作,以及条件语句、循环结构和函数定义等高级语法。

7、命令

sh命令分为内置命令和外部Linux命令。内置命令由shell解释器执行,无需启动新的进程。一些常用的内置命令包括:

  • echo:用于输出文本。
  • cd:用于改变当前工作目录。
  • read:用于从标准输入读取用户输入。
  • export:用于设置环境变量。
  • if:用于条件判断。
  • for:用于循环。
  • while:用于循环。
  • function:用于定义函数。

外部Linux命令是由独立的可执行文件组成的,它们可以在sh脚本中调用,比如lsgrepsedawk等。

8、命令替换

在sh脚本中,可以使用$()或``(反引号)来执行命令,并将其结果作为字符串替换到脚本中。这可以用于动态生成命令或获取命令的输出。

current_date=$(date)
file_list=`ls /path/to/files`

9、控制命令

sh脚本支持多种控制语句,包括:

  • if-else-fi:条件判断语句。
  • for:循环语句,用于迭代一个列表。
  • while:循环语句,用于根据条件重复执行命令。
  • until-do:与while类似,但是在条件为假时执行命令块。
  • case:多分支条件语句,类似于switch-case
  • continuebreak:用于控制循环的执行流程。

10、I/O重定向

在sh脚本中,可以使用I/O重定向将输入、输出和错误流重定向到文件或其他地方。主要形式包括>(覆盖)、>>(追加)、<(输入重定向)和<<(嵌入文档)。

11、嵌入文档

嵌入文档是一种用于生成长文本块的技术,通过指定特定的关键字来结束文档输入。这通常用于创建配置文件或生成特定格式的文档。

12、sh函数

sh脚本可以定义函数,函数通过function关键字定义,可以在脚本中的任何位置调用。函数可以接受参数,并可以有返回值。

13、sh中的通配符

通配符用于匹配文件名,包括:

  • 星号*:匹配零个或多个字符。
  • 问号?:匹配单个字符。
  • 方括号[]:匹配方括号内的任何一个字符。
    这些通配符在文件名匹配和模式匹配中非常有用。

14、命令分组

在sh脚本中,可以使用{}()对一组命令进行分组。{}将命令组合在一起,()会在子进程中执行命令组。这些分组通常用于控制命令的执行环境或I/O重定向。

15、eval语句

eval是一个内置命令,用于执行参数字符串中的命令,并将结果作为字符串返回。它通常用于动态生成命令并执行。

16、调试sh脚本

为了调试sh脚本,可以在执行时加上-x选项,例如bash -x myscript.sh,这将会显示每个命令的执行过程,帮助排查问题。此外,还可以使用set -xset +x命令来在脚本中开启和关闭调试模式。

二、问题及解决

在下述实践中需要使用目录地址,由于其余目录内容很少,我选择使用主目录,但是主目录地址并不知道,查询chatgpt后成功解决。

三、ChatGpt提问





四、实践及代码托管

包含两个小实践

4.1


4.2


4.3

代码托管至gitee,链接:https://gitee.com/wang-yuxuan333/123.git
具体为10.txt文档

posted @ 2023-09-24 14:43  20211210王宇轩  阅读(9)  评论(0编辑  收藏  举报