《信息安全系统设计与实现》第三周学习笔记
《信息安全系统设计与实现》第三周学习笔记
一门程序设计语言具有以下必备的要素和技能:
-
语法:程序设计语言需要定义一套语法规则,以确定如何组织和编写代码。这包括变量声明、控制流语句(如条件语句和循环语句)、函数定义等。
-
数据类型:语言需要支持不同的数据类型,如整数、浮点数、字符串、布尔值等。还可能支持更复杂的数据类型,如数组、列表、字典等。
-
变量和赋值:语言需要提供定义和使用变量的机制,以及赋值操作符来给变量赋值。
-
运算符:语言需要支持各种运算符,如算术运算符(加减乘除)、比较运算符(等于、不等于、大于、小于等)、逻辑运算符(与、或、非等)等。
-
控制流:语言需要提供控制程序执行流程的机制,如条件语句(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,包含:
使用chmod +x mysh使其可执行,然后运行mysh#!/bin/bash #comment line echo hello
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加法表
代码已托管
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:
解决
苏格拉底挑战
-
sh内置命令
-
sh控制语句