《信息安全系统设计与实现》第三周学习笔记
一、程序设计语言中的必备要素和技能
一门程序设计语言中的必备要素和技能通常包括以下内容:
- 语法:掌握语言的语法规则,包括关键字、标识符、表达式、语句和注释等。
- 数据类型:例如整数、浮点数、字符串、布尔值等。
- 变量和赋值:变量可以存储和操作数据。编写代码需要声明变量、给变量赋值
- 运算符和表达式:利用表达式进行计算和处理数据。
- 控制结构:例如条件语句、循环语句、其他控制结构等。
- 函数和模块化编程:定义和调用函数,将代码分解为可重复使用的模块,提高代码的可读性和维护性。
- 异常处理:了解如何处理错误和异常情况,增强程序的稳定性和可靠性。
在Shell脚本编程时中,存在一些变化:
- 语法:Shell脚本有自己的语法规则,例如命令行解释器以"#!"开头,使用特定的命令和操作符等。
- 变量和赋值:Shell脚本中使用变量时通常不需要显式声明,直接进行赋值即可。变量名通常没有类型限制。
- 命令和管道:Shell脚本可以直接调用系统命令,并使用管道将命令输出作为另一个命令的输入。
- 条件和循环:Shell脚本支持条件语句(如if-else语句),循环语句(如for和while循环)
- 函数和脚本文件:Shell脚本可以定义函数,函数可以在脚本中被调用,多个Shell命令可以保存在一个脚本文件中,通过执行该文件来运行一系列命令。
- 环境变量和参数传递:Shell脚本可以访问和修改环境变量,还可以接收和处理命令行参数。
Shell脚本虽然具有自己的语法和特点,但基本的程序设计要素和技能仍然适用。
二、课程内容学习
对于一个sh脚本,先建立一个文本文件mysh
这个mysh脚本是指一个自定义的Shell脚本,其中需要注意:
解释器声明:在mysh脚本的第一行中,需要添加一个解释器声明,指定要使用的解释器。例如,#!/bin/bash表示使用Bash解释器执行脚本。
变量处理:mysh脚本可以通过变量来存储和操作数据。变量可以通过赋值操作进行声明和定义,例如name="John"。在脚本中使用变量时,可以通过$符号引用其值,例如echo $name会输出变量name的值。
命令执行:mysh脚本可以调用系统命令、其他Shell脚本和自定义函数来完成特定任务,如文件操作、进程管理、文本处理等。例如利用ls命令列出当前目录中的文件和子目录。
下面是一个简单的mysh脚本示例,该脚本用于计算给定数字列表的总和:
(#!/bin/bash
numbers=(10 20 30 40 50) 定义输入数字列表
sum=0 初始化总和为0
for num in ${numbers[@]} 遍历数字列表并累加到总和中
do
sum=$((sum + num))
done
echo "总和为: $sum")
分析:
脚本开始处使用#!/bin/bash声明了解释器为Bash,告知系统使用Bash解释执行该脚本。
在脚本中定义了一个数字列表 numbers,其中包含了一组初始化的整数值。
sum变量被初始化为0,用于存储最后的总和结果。
执行for循环来遍历numbers列表。在每次循环迭代中,当前的数字被赋值给变量num。
每次迭代时,num的值会与sum相加,使用$((...))语法来实现算术运算,并将结果重新赋值给sum变量,从而实现累加操作。
循环结束后,使用echo命令输出计算得到的总和结果。消息字符串中的$sum表示要输出变量sum的值。
常见的Sh脚本内置命令包括:
echo:用于在屏幕上打印文本或变量的值。
pwd:用于显示当前工作目录的路径。
export:用于设置环境变量。
unset:用于删除环境变量或sh变量。
exit:用于退出Shell脚本。
test:用于进行条件测试。
shift:用于移动命令行参数。
source:用于在当前Shell环境中执行指定的文件。
常见的Sh脚本内置变量包括:
$0:当前脚本的名称。
$1, $2, $3, ...:表示传递给脚本或函数的参数。$1 表示第一个参数,$2 表示第二个参数,以此类推。
$@:表示传递给脚本或函数的所有参数。可以通过 "$@" 来将参数作为多个独立的字符串。
$#:表示传递给脚本或函数的参数个数。
$?:表示上一个命令的退出状态。通常用于检查命令是否成功执行。如果为0,则表示成功;非0值表示失败。
三、代码实践
定义了一个变量 directory,其中存储了目标目录的路径 ./nxy3。
接下来定义了old_string 和 new_string表示要被替换的旧字符串和替换后的新字符串。
"$directory"/*.txt 是一个通配符模式,使用 for 循环遍历目录下的所有以 .txt 结尾的文件,检查当前文件是否为普通文件,是则使用sed 命令,将 $old_string 替换为 $new_string。-i 选项用于直接修改文件内容
其中:s 表示替换操作,/g 表示全局替换,即每行中所有匹配到的旧字符串都会被替换为新字符串。
使用到的sh相关知识点
if 条件语句:用于根据条件的真假执行不同的代码块。
echo 命令:用于在终端输出文本消息。
变量的定义和使用:通过使用 $ 符号引用变量的值。
文件测试条件:使用 [ -f "$file" ] 来判断文件是否为普通文件。
字符串替换:使用 sed 命令来进行字符串的查找和替换。
执行权限:通过 chmod +x <脚本文件名> 命令为脚本文件添加可执行权限。
之后使用了sudo命令来执行具有root权限的文件
四、苏格拉底问答
五、其他知识
Shl脚本和C语言之间的对比:
用途和定位:
Sh脚本:种用于操作系统命令行解释器的脚本语言,主要用于在命令行环境下执行和批处理任务。
C语言:C语言是一门通用的高级编程语言,用于编写系统软件、应用程序和嵌入式系统。
语法和特性:
Sh脚本采用解释性语言的特性,它的语法较为简单,并且不需要编译过程。可以直接调用系统命令和其他Shell命令,可以通过变量、条件判断、循环控制等实现逻辑。
C语言采用编译性语言的特性,需要通过编译器将源代码编译成可执行文件,适用于开发底层系统软件和对性能要求较高的应用程序。
互操作性:
Sh脚本可以直接调用C语言编写的可执行文件或库函数,利用C语言的高性能功能和底层资源操作。
C语言同样可以通过系统调用、API等方式执行Shell脚本,与Shell脚本进行交互。
代码的改进方向
通过询问gpt,我知道了如何检查代码的完成情况,检验遍历到了哪些文件