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

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

时间:2023-09-24 15:34:46浏览次数:23  
标签:语句 脚本 文件 信息安全 第三周 笔记 命令 sh 执行

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


学习程序设计语言的体会

  • 必备的要素和技能
    在Python,c,java语言中我对于c语言的使用最多,所以我主要从c语言的角度说说我对于程序设计语言的必备的要素和技能。
    在我看来,学习程序设计语言,需要掌握以下必备要素和技能:
  1. 语法:了解C语言的基本语法,包括变量、数据类型、运算符、控制语句、函数、数组等。

  2. 输入输出:学习如何使用标准输入输出函数(如printf和scanf)进行数据的输入和输出。

  3. 数据类型:理解C语言中的不同数据类型,如整数类型、浮点数类型、字符类型等,以及它们的特点和使用方法。

  4. 控制语句:学习掌握条件语句(如if-else语句和switch语句)和循环语句(如for循环和while循环),实现程序的流程控制。

  5. 函数:了解函数的定义和调用,掌握函数的参数传递、返回值和作用域,能够使用函数模块化程序。

  6. 文件操作:了解如何打开、读取、写入和关闭文件,能够进行文件的输入输出操作。

  7. 调试和错误处理:掌握调试技巧,能够运用调试工具定位和修复程序中的错误,理解常见的错误类型和调试技巧。

  8. 解决问题的能力:具备解决问题和分析需求的能力,能够将问题进行分解和抽象,使用C语言编写符合需求的程序。

  • 在shell中的呈现方式
  1. 脚本编写:编写以#!/bin/bash为开头的Shell脚本文件,并在其中使用Shell脚本的基本语法来实现程序逻辑。

  2. 输入输出:使用echo命令输出内容,使用read命令获取用户输入。可以使用重定向和管道操作来处理输入输出。

  3. 数据类型:使用变量存储数据,并使用字符串、整数和数组等数据类型来处理不同类型的数据。

  4. 控制语句:使用条件语句(如if-else语句和case语句)和循环语句(如for循环和while循环)来实现程序的流程控制。

  5. 函数:定义函数并通过函数名调用函数,实现代码的模块化和复用。

  6. 文件操作:使用命令来读取、写入和处理文件,实现对文件内容的操作。

  7. 调试和错误处理:通过调试工具和错误处理机制来定位和修复脚本中的错误,保证脚本的正确运行。

  8. 解决问题的能力:具备解决问题和分析需求的能力,能够将问题进行分解和抽象,使用Shell脚本编写符合需求的程序。

第十章


sh脚本

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

sh脚本与c程序

sh脚本和c程序有一些相似之处,但它们在根本上是不同的。

  • sh是一个解释程序,逐行读取sh脚本文件并直接执行这些行。否则,它会复刻一个子进程来执行命令,并等待子进程终止后再继续,这与它执行单个命令行完全一样。
  • C 程序必须先编译链接到一个二进制可执行文件,然后通过主sh的子进程运行行二进制可执行文件。其次,在C程序中,每个变量必须有一个类型,例如char、int、float、 派生类型(如struct)等。相反,在sh脚本中,每个变量都是字符串。因此不需要类型,因为只有一种类型,即字符串。最后,每个 C程序必须有一个main()函数,每个函数必须定义一个返回值类型和参数(如有)。相反, sh 脚本不需要 main 函数。在 sh 脚本中,第一个可打执行语句是程序的入口点。

命令行参数

  • 可使用与运行sh命令完全相同的参数调用sh脚本
    mysh one two three

  • 命令行参数
    $#=命令行参数$1到$n的数量;
    $*=所有命令行参数,包括$0;
    此外,sh还有与命令执行相关的以下内置变量。
    $S=执行sh进程PID;
    $?=最后一个命令执行的退出状态(如果成功,则为0,否则为非0)

sh变量

  • sh有许多内置变量,如PATH,HOME,TERM,此外,用户还可使用任何符号作为sh变量,未赋值的sh变量是NULL字符串。
    赋值方法:
    variable=string # NOTE:no white spaces allowed between tokens

sh中的引号

  • sh中的特殊字符,如$、/、*、>、<等,要想把它们用作普通字符,可使用\或单引号来引用它们

sh语句

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

sh命令

  • 内置命令
    • .file:读取并执行文件
    • break [n]:从最近的第n个嵌套循环中退出
    • cd [dirname]:更换目录
    • continue [n]:重启最近的第n个嵌套循环
    • eval [arg...]:计算一次参数并让sh执行生成的命令
    • exec [arg...]:通过这个sh执行命令,sh将会退出
    • exit [n]:使sh退出,退出状态为n
    • export [var…]:将变量导出到随后执行的命令
    • read[var...]:从stdin中读取一行并为变量赋值
    • set[arg...]:在执行环境中设置变量
    • shift:将位置参数$2$3...重命名为$1$2
    • trap [arg][n]:接收到信号n后执行参数
    • umask [ddd]:将掩码设置为八进制数 ddd 的
    • wait [pid]: 等待进程 pid,如果没有给出pid,则等待所有活动子进程
    • read命令:当sh执行read命令时,它会等待来自stdin的输入行
      read命令示例如下:
echo -n "enter yes or no :" # wait for user input line from stdin
read ANs	# sh reads a line from stdin	
echo $ANS	# display the input string
  • Linux命令
    • echo命令:echo只是将参数字符串作为行回显到stdout,它通常将相邻的多个空格压缩为一个空格,除非有引号
    • expr命令:因为所有的sh变量都是字符串,所以我们不能直接把它们改为数值,expr是一个程序,它的运行方式如下:
      expr string1 OP string2 # OP= any binary operator on numbers
    • 管道命令:在sh脚本中经常使用管道作为过滤器
    • 实用命令
      • axk:数据处理程序
      • cmp:比较两个文件
      • comm:选择两个排序文件共有的行
      • grep:匹配一系列文件的模式
      • diff:找出两个文件的差异
      • join:通过使用相同的键来连接记录以比较两个文件
      • sed:流或行编辑命令
      • sort:排序或合并文件
      • tail:打印某个文件的最后口行
      • tr:一对一宇符翻译
      • uniq:从文件中删除连续重复行

命令替换

  • 在sh中,$A会被替换成A值/同样,当sh遇到'cmd'或$(cmd)时,它会先执行cmd,然后用执行的结果字符替换$(cmd)

sh控制语句

  • if-else-fi语句
语法:
  if [condition]
     then
        statemates
     else
        statements
  fi
  • if-elif-else-fi语句
语法:
  if [condition];then
      commands
    elif [condition2];then
      commands
  else
      commands
  fi
  • for语句
语法:
  if [condition];then
      commands
    elif [condition2];then
      commands
  else
      commands
  fi
  • while语句
语法:
  while [condition]
    do
      commands
    done
  • until-do语句
语法:
    until [ $ANS = "give up" ]
      do
          echo -n "enter your answer"
          read ANS
      done
  • case 语句
语法:
    case $variable in
         pattern1) commands;;
         pattern2) commands;;
         patternn) commands;;
    esac

I/O重定向

当进入sh命令时,我们可以指示sh将I/O重定向到除默认stdin、stdout和sterr以外的文件。I/O重定向有以下形式和含义:

  • file:stdout转向文件,如果文件不存在,将会创建文件

  • file:stdout追加到文件

  • < file:将文件用作stdin;文件必须存在并且具有r权限
  • << woed:从“here”文件中获取输入,直到只包含“word”的行

嵌入文档

  • 可以指示输出命令从stdin获取输入,将其回显到stdout,直到遇到预先安排的关键字

sh函数

  • 定义
   func()
{
    # function code
}

sh中的通配符

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

命令分组

  • 在sh脚本中,可以使用{}或()对命令进行分组

eval语句

  • 参数替换:扫描命令行,将任何$x替换为它的值,但只执行一次,即不能再次替换任何产生的$符号。
  • 命令替换:用替换行’pwd’。
  • 通配符扩展:当sh执行该文件时,它将new*展开为以abc开头的文件名,这些会把所有以abc开头的文件名复制到目标目录中。

调试sh脚本

sh脚本可由带有-x选项的子sh运行,以进行调试,如:
bash -x mysh

sh脚本的应用

  • sh脚本最常用于执行涉及冗长命令序列的常规作业

苏格拉底挑战

  • sh中的引号



  • sh中的通配符







遇到的问题

  • 问题:
    对于命令分组的作用这个知识点不太清楚
  • GPT的回答
    在sh脚本中,命令分组(Command grouping)是一种将多个命令组合在一起执行的方法。它可以通过圆括号()或花括号({})来实现。
  1. 使用圆括号()进行命令分组:
    命令分组以小括号包裹起来,括号内的命令会在一个子shell中执行。这样可以将多个命令作为一个整体进行处理。例如:
(命令1; 命令2; 命令3)

其中,命令1、命令2和命令3会按顺序依次执行。

  1. 使用花括号({})进行命令分组:
    命令分组以大括号包裹起来,括号内的命令会在当前shell中按顺序执行。例如:
{ 命令1; 命令2; 命令3; }

其中,命令1、命令2和命令3会按顺序依次执行。

命令分组的作用包括:

  • 控制命令的执行顺序:通过命令分组,可以确保其中的命令按照指定的顺序执行,而不受其他命令的影响。
  • 创建子shell环境:在使用圆括号进行命令分组时,每个命令都在一个子shell中执行,子shell中的变量和环境与父shell隔离,可以避免对父shell的影响。
  • 执行多个命令后返回一个结果:通过命令分组,可以将多个命令组合起来,最后返回一个整体的结果。

例如,使用命令分组来判断两个条件是否同时满足:

if [ 条件1 ] && { 命令1; 命令2; } 
then
    # 条件1和命令1、命令2都满足时执行的代码
else
    # 条件不满足或命令执行不成功时执行的代码
fi

在上面的示例中,只有当条件1满足且命令1和命令2都成功执行时,才会执行if语句块中的代码。

总结起来,命令分组是一种将多个命令组合在一起执行的方法,可以通过圆括号或花括号来实现。它可以控制命令的执行顺序、创建子shell环境以及返回一个整体结果。在编写复杂的脚本时,命令分组可以提高代码的可读性和灵活性。

标签:语句,脚本,文件,信息安全,第三周,笔记,命令,sh,执行
From: https://www.cnblogs.com/fanchaoming/p/17726040.html

相关文章

  • 笔记 | 信号和槽机制
    什么是信号和槽?信号和槽是Qt框架中的两个关键元素,用于对象之间的通信。简而言之,信号是对象发出的事件或消息,而槽是用于响应信号的特殊成员函数。通过将信号与槽连接起来,可以在一个对象发出信号时自动调用另一个对象的槽函数。在Qt中,信号和槽是通过宏(Q_OBJECT和SIGNAL、SLOT)进行声明......
  • Qemu源码分析(7)--Apple的学习笔记
    一,前言今天继续分析主要的api,包括了printlog和属性add及set,因为对于不同对象的操作,主要就是靠属性值设置及判断使用。二,源码分析A,关于qemu中自带的-d的log需要传入的参数主要通过-d然后传入的参数如下第2个成员,比如out_asmconstQEMULogItemqemu_log_items[]={{CPU_LOG_TB......
  • 学习笔记3
    第十章:sh编程介绍第十章的主要内容是研究sh编程。对于sh编程的介绍分为以下几个方面:1.sh脚本的编写脚本格式以#!/bin/bash开头(指向解释器)2.sh控制语句2.1脚本格式脚本格式以#!/bin/bash开头(指向解释器)2.2第一个shell脚本,helloworld.sh,输出helloworld!2.3执行方式方......
  • 学习笔记3
    学习笔记3一门程序设计语言具有以下必备的要素和技能:语法:了解语言的基本语法规则,包括变量、数据类型、运算符、控制流程(如条件语句和循环语句)、函数定义等。数据结构:理解常见的数据结构,如数组、链表、栈、队列、树、图等,并能够灵活地应用于实际问题中。算法:掌握常见的算法思......
  • 信息安全系统设计与实现课程第十章学习笔记
    一、知识点总结1、sh脚本sh脚本是一种文本文件,包含一系列sh语句,用于执行一系列命令。它是一种脚本语言,通常以.sh为文件扩展名。脚本的执行需要使用shell解释器,比如Bash、csh、ksh等。脚本的基本结构如下:#!/bin/bash#Thisisacommentecho"Hello,World!"在这个示例中,#!/......
  • 学习笔记3
    第10章sh编程——教材知识点归纳这一章课本为我们介绍的是sh编程内容,sh是一种脚本,是一种可以实现在linux中批量执行命令的文件。10.1~10.2sh脚本、sh脚本和C程序sh是Linux下进行批处理的脚本,我觉得它类似于windows下的bat脚本。可见sh脚本的逻辑和C语言等程序设计语言有很多......
  • 学习笔记3
    知识点归纳无论是Python、C、Java还是其他编程语言,程序设计语言通常都有一些共同的必备要素和技能。这些要素和技能在shell脚本中也可以找到对应,尽管shell脚本是一种脚本语言,与通用编程语言有些不同,但也具备类似的元素和技能。以下是一些必备的要素和技能:语法编写规范的代码:......
  • 学习笔记3
    知识点归纳一门程序设计语言的必备要素和技能可以总结为以下几点:语法:掌握语言的基本语法规则,包括变量的声明和赋值、控制结构(条件语句、循环语句等)、函数和类的定义等。数据类型:了解语言提供的不同数据类型,如整数、浮点数、字符串、数组、列表、字典等,并能灵活地运用它们。......
  • 学习笔记三
    一、任务详情自学教材第10章,提交学习笔记(10分)大家学习过Python,C,Java等语言,总结一下一门程序设计语言有哪些必备的要素和技能?这些要素和技能在shell脚本中是如何呈现出来的?知识点归纳以及自己最有收获的内容(3分)问题与解决思路(2分)实践内容与截图,代码链接(3分)...(知......
  • 学习笔记3
    第十章sh编程1.一门程序设计语言有哪些必备的要素和技能?这些要素和技能在shell脚本中是如何呈现出来的?-要素:数据类型、常量、变量、运算符、表达式、标识符、关键字、数组、基本控制结构、函数、输入和输出、解释器和编译器-技能:数据结构分析和设计算法分析和设计系统......