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

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

一门程序设计语言具有以下必备的要素和技能:

  • 语法:程序设计语言需要定义一套语法规则,以确定如何组织和编写代码。这包括变量声明、控制流语句(如条件语句和循环语句)、函数定义等。

  • 数据类型:语言需要支持不同的数据类型,如整数、浮点数、字符串、布尔值等。还可能支持更复杂的数据类型,如数组、列表、字典等。

  • 变量和赋值:语言需要提供定义和使用变量的机制,以及赋值操作符来给变量赋值。

  • 运算符:语言需要支持各种运算符,如算术运算符(加减乘除)、比较运算符(等于、不等于、大于、小于等)、逻辑运算符(与、或、非等)等。

  • 控制流:语言需要提供控制程序执行流程的机制,如条件语句(if-else语句)、循环语句(for循环、while循环)等。

  • 函数和模块:语言需要支持函数的定义和调用,以及模块化的编程方式,使得代码可以分成多个模块,提高代码的可读性和可维护性。

  • 异常处理:语言需要提供异常处理机制,以处理程序运行过程中可能出现的错误和异常情况。

Shell脚本中,这些要素和技能也有相应的呈现方式:

  • 语法:Shell脚本使用特定的语法规则,如以#!/bin/bash开头指定解释器、使用变量时无需声明等。

  • 数据类型:Shell脚本中的数据类型主要包括字符串和数字。Shell脚本没有像Python或Java那样提供丰富的内置数据类型。

  • 变量和赋值:Shell脚本使用变量时无需声明,直接使用即可,赋值使用等号(=)。

  • 运算符:Shell脚本支持基本的算术运算符(加减乘除)、比较运算符(等于、不等于、大于、小于等)和逻辑运算符(与、或、非等)。

  • 控制流:Shell脚本使用条件语句(if-else语句)和循环语句(for循环、while循环)来控制程序的执行流程。

  • 函数和模块:Shell脚本可以定义函数,使用function关键字,也可以使用外部的Shell脚本文件作为模块进行代码的复用。

  • 异常处理:Shell脚本可以通过trap命令来捕获和处理异常,也可以使用条件语句来处理错误情况。

第十章 sh编程

sh脚本

  • sh脚本是一个包含sh语句的文本文件,命令行解释程序sh要执行该语句。
  • 创建文件文本mysh,包含:
    #!/bin/bash
    #comment line
    echo hello
    
    使用chmod +x mysh使其可执行,然后运行mysh

sh脚本与C程序

  • sh是一个解释程序,逐行读取sh脚本文件并直接执行这些行。sh脚本不需要main函数,第一个可执行语句是程序的入口点。
  • C语言必须先编译链接到一个二进制可执行文件,然后通过主sh的子进程运行二进制可执行文件,每个变量必须有一个类型,必须有main()函数。

命令行参数

可使用与运行sh命令完全相同的参数调用sh脚本,如
mysh one two three
参数$0、$1、$2等访问命令行参数

内置变量$#和$*计数并显示命令行参数

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

sh变量

内置变量

  • PATH
  • HOME
  • TERM

sh中的引号

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

sh语句

sh语句包括所有Unix/Linux命令,以及可能的I/O重定向
示例:

ls
ls > outfile
date
cp f1 f2
mkdir newdir
cat < filename

此外,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…]:将变量导出到随后执行的命令.
  • trap [arg] [n]:接收到信号n后执行参数。
  • umask [ddd]:将掩码设置为八进制数 ddd 的。
  • wait pid]: 等待进程 pid,如果没有给出pid,则等待所有活动子进程。
  • read命令:当sh执行read命令时,它会等待来自stdin的输入行。
  • 实践:实现一个9*9加法表
    image
    image

代码已托管

Linux命令

  • echo命令
  • expr命令
  • 管道命令:在sh脚本中经常使用管道作为过滤器
    ps -ax | grep httpd
    cat file | grep word
    
  • 实用命令
    • axk:数据处理程序。
    • cmp:比较两个文件。
    • comm:选择两个排序文件共有的行。
    • grep:匹配一系列文件的模式。
    • diff:找出两个文件的差异。
    • join:通过使用相同的键来连接记录以比较两个文件。
    • sed:流或行编辑命令。
    • sort:排序或合并文件。
    • tail:打印某个文件的最后口行。
    • tr:一对一宇符翻译。
    • uniq:从文件中删除连续重复行。

命令替换

sh控制语句

  • if-else-fi语句
    if [condition]
    then
    statemates
    else
    statements
    fi
    -运算符 -eq -ne -lt -gt
  • if-elif-else-fi语句
    if [condition];then
    commands
    elif [condition2];then
    commands
    else
    commands
    fi
  • for语句
    for VARIABLE in string1 string2 ... stringn
    do
    commands
    done
  • 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以外的文件

  • > file:stdout转向文件,如果文件不存在,将会创建文件
  • >> file:stdout追加到文件
  • < file:将文件用作stdin;文件必须存在并且具有r权限
  • << woed:从“here”文件中获取输入,直到只包含“word”的行

嵌入文档

sh函数

	func()
	{
	    # function code
	}

sh中的通配符

  • *:可扩展到当前目录中的所有文件
  • ?:查询某文件名中的字符
  • []:查询文件名中一对[]中的字符

命令分组

使用{}或()对命令进行分组

调试sh脚本

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

sh脚本的应用

遇到的问题

  • 重定向的具体作用
  • ChatGpt:
    image
    image
    image
    解决

苏格拉底挑战

  • sh内置命令
    image
    image
    image
    image
    image
    image
    image
    image

  • sh控制语句
    image
    image
    image
    image
    image
    image
    image

posted @ 2023-09-19 19:52  20211408王其  阅读(36)  评论(0编辑  收藏  举报