信息安全系统设计与实现学习笔记3
一、知识点归纳以及自己最有收获的内容
- 知识点归纳
程序设计语言的要素和技能包括语法、语义和语用。这在shell脚本中体现在各类命令中。
语言基本成分包括数据成分、运算成分和控制成分。 - 第10章 sh编程
sh脚本是包含sh语句的文本文件,由sh解释程序执行。
命令行参数可以通过$0、$1、$2等访问。特殊字符$表示替换。
位置参数:$n(如果n > 9, 使用{}括起来);$0是程序名,其余是参数。
内置变量:$*(所有命令行参数,包括$0)、$S(执行sh的进程PID)、$?(最后一个命令的退出状态,成功为0)。
特殊符号包括~(家目录)、!(执行历史命令)、$(变量中取内容符)、&(后台执行)、;(一行执行多个命令,以此为间隔)、|(管道符)、``(反引号,命令中执行命令)。
sh命令分为内置命令和Linux命令。
内置命令包括.file(读取并执行文件)、break(从最近的第n个嵌套循环中退出)、cd(更换目录)、continue(重启最近的第n个嵌套循环)等。
Linux命令如echo(将参数字符串作为行回显到stdout)、expr(间接更改sh变量的值)等。
sh支持多种控制语句,类似于C语言的语句。
if-else-if语句、for语句、while语句、until-do语句、case语句、continue和break语句等。
运算包括等于(eq)、大于(gt)、小于(lt)、大于或等于(ge)、小于或等于(le)、不等于(ne)等。
- I/O重定向
file:stdout转向文件,如果文件不存在,将会创建文件。
file:stdout追加到文件。
<file:将文件用作stdin,文件必须存在并具有读权限。
<<word:从“here”文件中获取输入,直到只包含“word”的行。
- sh函数
sh函数的定义形式为:
bash
Copy code
func()
{
function code
}
通配符包括星号(*)通配符(可扩展到当前目录中的所有文件)、?通配符(查询某文件名中的字符)和[]通配符(查询文件名中一对[]中的字符)。
5. 调试脚本
sh脚本可以由带有-x选项的子sh运行以进行调试。
自己最有收获的内容
通过sh编程语言的学习,结合之前学习的python、C语言、JAVA,我进一步掌握了不同语言之间的通用性。例如,不同语言在输入输出方面可能会有不同的语句,但它们都会涉及到输入与输出。这些共性是学习一门语言最好的起点。
二、问题与解决思路
- 对管道概念模糊,不知道在sh中起什么作用。
解决方法:通过查询相关资料,了解到管道的作用是提供一个通道,将上一个程序的标准输出重定向到下一个程序作为下一个程序的标准输入。通常使用管道可以简化形式,并且执行效率要远高于使用临时文件。
一些命令对管道的应用
选取命令:cut, grep
cut 以行为单位处理信息,参数包括-b(以字节为单位进行分割)、-c(以字符为单位进行分割)、-d(自定义分隔符,默认为制表符)、-f(依据-d参数的分割字符将一段信息分割为数段,用-f取出第几段)等。
grep 用于匹配一系列文件的模式,结合cut可用于筛选所需信息。
排序命令:sort, wc, uniq
sort 可以根据不同的关键词进行排序,参数包括-f(忽略大小写)、-b(忽略最前面的空格符部分)等。
uniq 可以去除重复的数据,相当于sort的-u选项。
wc 是一个计数工具,参数包括-l(仅列出多少行)、-w(仅列出多少字,英文单词)等。
三、实践内容与截图
实践1:Hello World
bash
Copy code
!/bin/bash
编写hello world脚本
echo "Hello World!"
实践2:猜数字
bash
Copy code
!/bin/bash
脚本生成一个 100 以内的随机数,提示用户猜数字,根据用户的输入,提示用户猜对了,
猜小了或猜大了,直至用户猜对脚本结束。
RANDOM 为系统自带的系统变量,值为 0‐32767的随机数
使用取余算法将随机数变为 1‐100 的随机数
num=$[RANDOM%100+1]
echo "$num"
使用 read 提示用户猜数字
使用 if 判断用户猜数字的大小关系:‐eq(等于),‐ne(不等于),‐gt(大于),‐ge(大于等于),
‐lt(小于),‐le(小于等于)
while :
do
read -p "计算机生成了一个 1‐100 的随机数,你猜: " cai
if [ $cai -eq $num ]
then
echo "恭喜,猜对了"
exit
elif [ $cai -gt $num ]
then
echo "Oops,猜大了"
else
echo "Oops,猜小了"
fi
done