信息安全系统设计与实现——学习笔记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命令



I/O重定向



Part2 问题与解决思路
问题:编写好sh文件以后,无法执行,显示权限不够

gpt解决

最终解决方案

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




- sh代码与注释
#!/bin/sh
# 输入重定向,从文件中读取输入
while read num; do
sum=$((sum + num))
done < input.txt
# 输出重定向,将结果写入到文件中
echo "Sum: $sum" > output.txt
Part4 其他



浙公网安备 33010602011771号