信息安全系统设计与实现——学习笔记3

任务详情:自学教材第10章,提交学习笔记(10分)大家学习过Python,C,Java等语言,总结一下一门程序设计语言有哪些必备的要素和技能?这些要素和技能在shell脚本中是如果呈现出来的?

Part1 知识点归纳&GPT提问

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

  • 必备要素
    • 要素一:语法和语义:了解和掌握语言的基本语法规则和编程范式,理解变量、数据类型、运算符、控制结构等基本概念。
    • 要素二:算法和数据结构:熟悉常见的算法和数据结构,如数组、链表、栈、队列、树等,能 够根据实际问题选择合适的数据结构和算法来解决问题。
  • 必备技能
    • 技能一:编程范式:熟悉所学语言的编程范式,如面向过程、面向对象、函数式编程等。了解不同编程范式的特点和适用场景,能够根据需求选择合适的范式来编写代码。
    • 技能二:调试和错误处理:具备调试技巧,能够追踪程序运行过程中的错误,并解决问题。掌握异常处理机制,能够捕获和处理可能出现的异常情况,确保程序的稳定性和可靠性。
    • 技能三:代码组织和模块化:具备良好的代码组织能力,采用适当的命名规范和代码结构,使代码具有可读性和可维护性。利用函数、类、模块等机制实现代码的模块化和复用,提高开发效率。
    • 技能四:熟练运用开发工具:掌握所学语言的开发工具,如集成开发环境(IDE)、编辑器、调试器等,能够熟练使用这些工具来辅助开发、调试和测试代码。
    • 技能五:持续学习和实践:程序设计语言的发展日新月异,掌握一门语言并不是一劳永逸的事情。持续学习该语言的新特性、库函数和最佳实践,通过实践项目或参与开源项目来提升自己的编程能力。
  • shell体现
    • 变量和数据类型:Shell编程中使用变量来存储和操作数据。了解变量的定义、赋值和引用等基本概念,以及不同的数据类型(如字符串、整数、数组)的处理方法,都是程序设计语言的基本要素,在Shell编程中同样很重要。
    • 控制结构:能够使用条件语句(如if-else、case语句)、循环结构(如for循环、while循环)和函数等控制结构来实现流程控制和逻辑判断。掌握这些控制结构有助于编写更灵活和可维护的Shell脚本。
    • 输入和输出:了解标准输入和输出(stdin、stdout)以及错误输出(stderr)的概念,并熟悉如何读取和处理用户输入、将结果输出到屏幕或文件等,这些也是程序设计语言中常见的要素,在Shell编程中同样需要掌握。
    • 错误处理和异常处理:了解如何处理错误和异常情况是程序设计语言中的重要技能。在Shell编程中,需要熟悉如何处理错误返回码(exit code)、捕获异常以及使用条件判断来处理出错情况。
    • 调试和测试:掌握调试工具和技术,能够定位错误并修复问题。在Shell编程中,使用echo语句输出中间结果、使用调试模式和日志记录等技巧,有助于排查和修复脚本中的错误。

知识点归纳

命令行参数

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

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的输入行。
  • 其他命令
    • echo命令
    • expr命令
    • axk:数据处理程序。
    • cmp:比较两个文件。
    • comm:选择两个排序文件共有的行。
    • grep:匹配一系列文件的模式。
    • diff:找出两个文件的差异。
    • join:通过使用相同的键来连接记录以比较两个文件。
    • sed:流或行编辑命令。
    • sort:排序或合并文件。
    • tail:打印某个文件的最后口行。
    • tr:一对一宇符翻译。
    • uniq:从文件中删除连续重复行。

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语句
    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”的行

GPT提问

sh命令

image
image
image

I/O重定向

image
image
image

Part2 问题与解决思路

问题:编写好sh文件以后,无法执行,显示权限不够

image

gpt解决

image

最终解决方案

image

Part3 实践过程截图

sh编程实践

任务描述:假设我们有一个文本文件 input.txt,其中包含一些数字。我们希望计算这些数字的和,并将结果输出到文件 output.txt 中。
  • 实践过程

创建 input.txt 文件并写入数字

vim input.txt

创建 sum.sh 脚本文件,同样可以使用文本编辑器创建并编辑该文件:

vim sum.sh

在终端中,进入脚本所在的目录:

cd /path/to/script/

确保你已经在包含 input.txt 和 sum.sh 的目录下。

为脚本文件 sum.sh 添加执行权限:

chmod +x sum.sh

运行脚本:

./sum.sh

image
image
image
image

  • sh代码与注释
#!/bin/sh

# 输入重定向,从文件中读取输入
while read num; do
sum=$((sum + num))
done < input.txt

# 输出重定向,将结果写入到文件中
echo "Sum: $sum" > output.txt

Part4 其他

image
image

posted @ 2023-09-17 19:27  ahuahauhau  阅读(75)  评论(0)    收藏  举报