首页 > 其他分享 >《信息安全系统设计与实现》第三周学习笔记

《信息安全系统设计与实现》第三周学习笔记

时间:2023-09-22 22:23:45浏览次数:33  
标签:脚本 文件 Shell 变量 sum 信息安全 第三周 笔记 命令


一、程序设计语言中的必备要素和技能

一门程序设计语言中的必备要素和技能通常包括以下内容:

  1. 语法:掌握语言的语法规则,包括关键字、标识符、表达式、语句和注释等。
  2. 数据类型:例如整数、浮点数、字符串、布尔值等。
  3. 变量和赋值:变量可以存储和操作数据。编写代码需要声明变量、给变量赋值
  4. 运算符和表达式:利用表达式进行计算和处理数据。
  5. 控制结构:例如条件语句、循环语句、其他控制结构等。
  6. 函数和模块化编程:定义和调用函数,将代码分解为可重复使用的模块,提高代码的可读性和维护性。
  7. 异常处理:了解如何处理错误和异常情况,增强程序的稳定性和可靠性。

在Shell脚本编程时中,存在一些变化:

  1. 语法:Shell脚本有自己的语法规则,例如命令行解释器以"#!"开头,使用特定的命令和操作符等。
  2. 变量和赋值:Shell脚本中使用变量时通常不需要显式声明,直接进行赋值即可。变量名通常没有类型限制。
  3. 命令和管道:Shell脚本可以直接调用系统命令,并使用管道将命令输出作为另一个命令的输入。
  4. 条件和循环:Shell脚本支持条件语句(如if-else语句),循环语句(如for和while循环)
  5. 函数和脚本文件:Shell脚本可以定义函数,函数可以在脚本中被调用,多个Shell命令可以保存在一个脚本文件中,通过执行该文件来运行一系列命令。
  6. 环境变量和参数传递: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,我知道了如何检查代码的完成情况,检验遍历到了哪些文件

标签:脚本,文件,Shell,变量,sum,信息安全,第三周,笔记,命令
From: https://www.cnblogs.com/ningxinyu1/p/17723512.html

相关文章

  • 刷题笔记(2023.9.22)
    路灯2一眼区间\(dp\),定义一个三维数组\(f[i][j][0]\)表示\(i\simj\)区间中最后关第\(i\)盏灯。\(f[i][j][1]\)表示\(i\simj\)区间中最后关第\(j\)盏灯。然后可以退出状态转移方程为intA=f[i+1][j][0]+(p[i+1]-p[i])*(sum[n]-sum[j]+sum[i]);intB=f[i+1][j......
  • 第三周课后动手动脑
     publicstaticvoidmain(String[]args){System.out.println("Thesquareofinteger7is"+square(7));System.out.println("\nThesquareofdouble7.5is"+square(7.5));}publicstaticintsquare(intx)......
  • openGauss学习笔记-77 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT特性及
    openGauss学习笔记-77openGauss数据库管理-内存优化表MOT管理-内存表特性-MOT特性及价值本节介绍了openGauss内存优化表(Memory-OptimizedTable,MOT)的特性及价值。77MOT特性及价值MOT在高性能(查询和事务延迟)、高可扩展性(吞吐量和并发量)以及高资源利用率(某些程度上节约成本)方面......
  • 9.18动手动脑笔记整理
    64k的文件是什么概念呢?1行代码大概(平均)是30字节,64k的源代码是2184行如果代码风格好一点,再多一些空行的话,差不多也就是3000行上下Java程序中最基本的构造单元是类,而类中最重要的成员就是方法  类方法的编写:只需创造一个类,然后为其编写声明为public的函数即可 ......
  • 计算机组成原理笔记(1)
    教材:《计算机组成原理(第2版)》唐朔飞《计算机组织与设计:硬软件接口技术》A.PattersonJohn.L.Hennessy(以MIPS为实例)《数字设计和计算机体系结构》MorganKaufmann1.1计算机系统简介现代计算机的多态性:sensor,Info.appliance,laptop,PC,server,mainframe,HPC(高性......
  • 结构化剪枝 之 L1 剪卷积核 笔记
    论文:https://arxiv.org/pdf/1608.08710.pdf摘要CNN在各种应用中的成功伴随着计算和参数存储成本的显著增加。最近减少这些开销的努力包括在不损害原始精度的情况下修剪和压缩各个层的权重。然而,基于大小的权值修剪减少了完全连接层的大量参数,并且由于修剪后的网络中的不规则稀......
  • Linux系统文件管理读书笔记
        在我初学Linux系统的过程中,我学到了一些基础知识,包括了解Linux系统的目录结构、掌握处理文件的基本命令,以及掌握vim编辑器的使用。这些知识对于理解和使用Linux系统非常重要,下面是我学到的一些关键点:Linux系统目录结构:Linux系统的目录结构是层级化的,它包括了许多不同......
  • stm32笔记[9]-串口控制云台
    摘要基于stm32的云台控制程序,使用串口接收云台移动指令对云台进行控制.使用软件实现的PWM波发生方式.平台信息ArduinoIDEstm32f103c8t6接口S3:servo_bottom_pin:PA2S4:servo_top_pin:PA3S5:laser_pin:PB4S21:sl_in_pin:PA8S22:sr_out_pin:PB14S23:sl_out_pin:PB1......
  • 学习笔记1
    python使用opencv获取图像尺寸(高宽深)importcv2ascvimg=cv.imread("D:\\test.jpg")size=img.shapeh=size[0]#高度w=size[1]#宽度chan=size[2]#通道数img.size#像素数目print(size)结果(512,512,2)imread返回的是numpy.ndarray对象,[高,宽,通道......
  • 标记永久化学习笔记
    标记永久化是线段树的另一种写法,顾名思义,就是让懒标记永久作用于结点上不下传。回顾一下下传标记的写法。对于一个结点,懒标记作用于其管辖的范围。换句话说,其所有子孙结点都会被懒标记作用恰好一次。在进入下一层时,我们先将懒标记作用于其儿子,然后再将懒标记和其儿子的懒标记合并......