Linux程序设计环境
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
BIOS读取MBR,从MBR载入grub/grub2
Grub是一个多系统的启动管理器,它能够理解磁盘上 的各种文件系统和目录格式。Grub根据配置文件将启 动选项显示给用户,接着读入并把控制权交给kernel。
Kernel在进行自我配置以后,将运行进程0。进程0将 会配置实时时钟和多进程环境,挂载文件系统,创建页 面守护进程和init进程。
参数为.tmp/ABC//Dir
低分作业的原因
死循环 报语法错误 递归有逻辑错误
注意事项: 提交作业之前一定要亲自运行一遍! 脚本不要提交.txt格式,也不要打包成.rar
谢谢!
Q&A
作业常见问题(6/6)
问题六:
没有区分’*’与’+‘
例如
[A-Za-z0-9]*@[A-Za-z0-9.]* [A-Za-z0-9](\w)*([._]?(\w)*)*@(\w*\.)+[A-Za-z]*
导致的问题
name@.
作业五:转换文件名
题目:
编写一个脚本cvpn.sh, 可对指定目录下的所有文件的文件名中的大 写字母转化为小写字母.
一开始写的时候,比较懒,从没有想到要把它写 到一个公共的模块里。但随着项目的进行,这种情 况出现的频率变得越来越多。后来发现这种“从路 径中取得文件名”的算法要考虑文件名为目录的情 形(以“/”作为结尾),情况变得不可控制。于是不 得不写了一个专门处理路径的函数,这样调用起来 就放心许多:
优秀作业:
反例:name..a@pku.edu.cn
@之前或之后不能以特殊字符结尾
反例:name.@pku.edu.cn , name@abc.com.
标准的email正则表达式(2/2)
@之后必须含有字符’.‘
反例:name@abc
@之后只允许含有特殊字符’-’和’.’,但是特殊字符 不能连续出现
Linux程序设计环境 第一次作业讲评
徐岚 2010.5.19
讲评范围
作业分析 Linux启动过程详述 抓取网页中的email地址 转换文件名
第二次作业:作业分析
题目:
请找出你之前认为非常满意的某个程序设计课程作业,针对某个/某几 个Unix的哲学思想和设计原则, 分析你的作业.
UNIX哲学概览
getty将终端与login进行连接,显示文本登陆界面,实 现验证登录用户的过程。如果是正确的,login程序将 以用户指定或默认的shell程序替换自身。
shell程序用来解析或执行用户输入的命令
优秀作业标准
能够结合网络上的资源,进行自己的总结 如果引用原文,能够指明出处
(归结为一条,就是态度)
递归处理或者用find命令
优秀作业:
金鑫 张伟 洪星星 谢佳亮 等等…
使用find命令-张伟
#!/bin/sh
if [ ! -d "$1" ] then
echo "please input a dir!" exit 0 fi
files=`find $1 | sort -r` for file in $files do
模块化原则 清晰原则 组合原则 简洁原则与吝啬原则 透明性原则 健壮性原则 表示原则
通俗原则 缄默原则 补救原则 经济原则 生成原则 优化原则 多样原则 扩展原则
优秀作业的标准
对各原则的理解准确
给了一个helloworld,说体现了模块性
结合源代码进行分析
没有提供源代码
标准的email正则表达式(1/2)
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
包含了一些十分发指的规则…如下:
@之前或之后均只能以字母、数字或下划线开头
反例:-name@pku.edu.cn , name@.abc.com
@之前只允许含有特殊字符’-’,’+’,’.’,但是特殊字符 不能连续出现
dir=`dirname $file` [ "$dir" = "." ] && continue oldname=`basename $file` newname=`echo $oldname | tr A-Z a-z` [ "$oldname" != "$newname" ] && mv $dir/$oldname $dir/$newname done
优秀作业:
曲直 何辉辉 吴志川 李克强 王沛 等等…
第四次作业:抓取网页中的email地址
题目:
编写Shell脚本, 对于给定的一个URL, 分析该URL的HTML页面, 抓取其中 的email地址, 并输出到标准输出.
主要考察正则表达式
最简洁的作业答案:(张旭东)
#!/bin/sh w3m $1 | egrep -o‘\w+([-.]\w+)*@\w+([-.]\w+)*\.\w+([.]\w+)*’
例如
[a-zA-Z0-9][a-zA-Z0-9+._-]*@\([a-zA-Z0-9]+.\)*[azA-Z]\{2,\}‘
导Hale Waihona Puke Baidu的问题
特殊字符的连续出现 以特殊字符结尾
作业常见问题(5/6)
问题五:
以特殊字符开头或结尾
例如
[0-9a-zA-Z._-]+@[0-9a-zA-Z_-]+\.[a-zA-Z._-]+
init进程是所有进程的起点,它的工作分为sysinit和rc 两步。rc.sysinit是一个bash shell的脚本,它主要完 成的工作有激活交换分区,检查磁盘,加载硬件模块以 及其它一些需要优先执行任务
Linux启动过程(2/2)
然后,以运行级别为参数,执行/etc/rc.d/rc脚本,主 要工作是启动对应运行级别的守护进程。
反例:name@abc..com
作业常见问题(1/6)
问题一:
对[ ]中的特殊字符进行了转义
比较[-\+\.]和[-+.]
[\.]代表字符’\‘或者字符’.‘
作业常见问题(2/6)
问题二:
没有要求@之后必须含有’.’
例如
[a-zA-Z0-9-._]+@[a-zA-Z0-9-._]+
分析过程清晰且具有说服力
只指出原则,没有给出具体分析 贴十几页的代码,进行两三行的简单分析
能分析不足之处
将自己的代码往每个原则上去生硬的套
结合源代码进行分析
优秀作业-曲直:
SPOT法则告诉我们任何知识点在系统内部都 应该有一个唯一、明确、权威的表述,因为重复都 可能会导致矛盾,产生隐藏的问题。在这个工程中, 有时要从一个完整的路径中获得文件名,这个本来 算法很简单,就是取从最后一个“/”后的所有内容:
使用递归函数-谢佳亮
#!/bin/bash
function doit { cd "$1" for filename in * do newname=`echo "$filename" | tr [A-Z] [a-z]` if [ $newname != $filename ] then mv $filename $newname fi if [ -d $newname ] then doit $newname fi done cd ..
}
作业常见问题(1/3)
问题一:
使用find或者ls命令,并在用tr将文件名转为小写之前,没有 将文件路径名分解为dirname和basename分别处理。
导致的问题:输入的文件夹路径名中不能含有大写
cvpn.sh ./tmp/ABC 假如该文件夹下有Dir1; dir2
mv ./tmp/ABC/Dir1 ./tmp/abc/dir1
导致的问题
-_-@-_ name@-
作业常见问题(3/6)
问题三:
要求必须是单词的开头或结尾
例如
\b[-a-z0-9._]+@[-a-z0-9.]+\.[a-z]{2,4}\b
导致的问题
mailto:name@pku.edu.cn
作业常见问题(4/6)
问题四:
将特殊字符与数字、字母混为一谈
曲直 李锭 李诗雨 等等…
由于是静态函数,所以也不会产生多少额外开销, 但代码的清晰程度却提高了。
第三次作业:Linux启动过程详述
题目: 描述Linux的启动过程, 包括 Grub/Grub2->kernel->init>inittab->getty->login>sh的整个流程.
Linux启动过程(1/2)
作业常见问题(3/3)
问题三:
递归时的参数使用$dir/$name拼接而成
导致的问题:输入的文件夹路径名不能以‘/’结尾
if [ -d $Name ]; then DirList=`ls $Name` for name in $DirList do cvpn.sh $Name/$name done
在此之后,将找不到./tmp/ABC/dir2 !
作业常见问题(2/3)
问题二:
使用mv 命令之前没有判断oldname是否等于newname
导致的问题:不能含有名字为小写的文件或子目录
newfile="`dirname $file`/`basename $file | tr [A-Z] [a-z]`" mv $file $newfile 然而,mv ./tmp/a ./tmp/a 的结果?
Grub是一个多系统的启动管理器,它能够理解磁盘上 的各种文件系统和目录格式。Grub根据配置文件将启 动选项显示给用户,接着读入并把控制权交给kernel。
Kernel在进行自我配置以后,将运行进程0。进程0将 会配置实时时钟和多进程环境,挂载文件系统,创建页 面守护进程和init进程。
参数为.tmp/ABC//Dir
低分作业的原因
死循环 报语法错误 递归有逻辑错误
注意事项: 提交作业之前一定要亲自运行一遍! 脚本不要提交.txt格式,也不要打包成.rar
谢谢!
Q&A
作业常见问题(6/6)
问题六:
没有区分’*’与’+‘
例如
[A-Za-z0-9]*@[A-Za-z0-9.]* [A-Za-z0-9](\w)*([._]?(\w)*)*@(\w*\.)+[A-Za-z]*
导致的问题
name@.
作业五:转换文件名
题目:
编写一个脚本cvpn.sh, 可对指定目录下的所有文件的文件名中的大 写字母转化为小写字母.
一开始写的时候,比较懒,从没有想到要把它写 到一个公共的模块里。但随着项目的进行,这种情 况出现的频率变得越来越多。后来发现这种“从路 径中取得文件名”的算法要考虑文件名为目录的情 形(以“/”作为结尾),情况变得不可控制。于是不 得不写了一个专门处理路径的函数,这样调用起来 就放心许多:
优秀作业:
反例:name..a@pku.edu.cn
@之前或之后不能以特殊字符结尾
反例:name.@pku.edu.cn , name@abc.com.
标准的email正则表达式(2/2)
@之后必须含有字符’.‘
反例:name@abc
@之后只允许含有特殊字符’-’和’.’,但是特殊字符 不能连续出现
Linux程序设计环境 第一次作业讲评
徐岚 2010.5.19
讲评范围
作业分析 Linux启动过程详述 抓取网页中的email地址 转换文件名
第二次作业:作业分析
题目:
请找出你之前认为非常满意的某个程序设计课程作业,针对某个/某几 个Unix的哲学思想和设计原则, 分析你的作业.
UNIX哲学概览
getty将终端与login进行连接,显示文本登陆界面,实 现验证登录用户的过程。如果是正确的,login程序将 以用户指定或默认的shell程序替换自身。
shell程序用来解析或执行用户输入的命令
优秀作业标准
能够结合网络上的资源,进行自己的总结 如果引用原文,能够指明出处
(归结为一条,就是态度)
递归处理或者用find命令
优秀作业:
金鑫 张伟 洪星星 谢佳亮 等等…
使用find命令-张伟
#!/bin/sh
if [ ! -d "$1" ] then
echo "please input a dir!" exit 0 fi
files=`find $1 | sort -r` for file in $files do
模块化原则 清晰原则 组合原则 简洁原则与吝啬原则 透明性原则 健壮性原则 表示原则
通俗原则 缄默原则 补救原则 经济原则 生成原则 优化原则 多样原则 扩展原则
优秀作业的标准
对各原则的理解准确
给了一个helloworld,说体现了模块性
结合源代码进行分析
没有提供源代码
标准的email正则表达式(1/2)
\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
包含了一些十分发指的规则…如下:
@之前或之后均只能以字母、数字或下划线开头
反例:-name@pku.edu.cn , name@.abc.com
@之前只允许含有特殊字符’-’,’+’,’.’,但是特殊字符 不能连续出现
dir=`dirname $file` [ "$dir" = "." ] && continue oldname=`basename $file` newname=`echo $oldname | tr A-Z a-z` [ "$oldname" != "$newname" ] && mv $dir/$oldname $dir/$newname done
优秀作业:
曲直 何辉辉 吴志川 李克强 王沛 等等…
第四次作业:抓取网页中的email地址
题目:
编写Shell脚本, 对于给定的一个URL, 分析该URL的HTML页面, 抓取其中 的email地址, 并输出到标准输出.
主要考察正则表达式
最简洁的作业答案:(张旭东)
#!/bin/sh w3m $1 | egrep -o‘\w+([-.]\w+)*@\w+([-.]\w+)*\.\w+([.]\w+)*’
例如
[a-zA-Z0-9][a-zA-Z0-9+._-]*@\([a-zA-Z0-9]+.\)*[azA-Z]\{2,\}‘
导Hale Waihona Puke Baidu的问题
特殊字符的连续出现 以特殊字符结尾
作业常见问题(5/6)
问题五:
以特殊字符开头或结尾
例如
[0-9a-zA-Z._-]+@[0-9a-zA-Z_-]+\.[a-zA-Z._-]+
init进程是所有进程的起点,它的工作分为sysinit和rc 两步。rc.sysinit是一个bash shell的脚本,它主要完 成的工作有激活交换分区,检查磁盘,加载硬件模块以 及其它一些需要优先执行任务
Linux启动过程(2/2)
然后,以运行级别为参数,执行/etc/rc.d/rc脚本,主 要工作是启动对应运行级别的守护进程。
反例:name@abc..com
作业常见问题(1/6)
问题一:
对[ ]中的特殊字符进行了转义
比较[-\+\.]和[-+.]
[\.]代表字符’\‘或者字符’.‘
作业常见问题(2/6)
问题二:
没有要求@之后必须含有’.’
例如
[a-zA-Z0-9-._]+@[a-zA-Z0-9-._]+
分析过程清晰且具有说服力
只指出原则,没有给出具体分析 贴十几页的代码,进行两三行的简单分析
能分析不足之处
将自己的代码往每个原则上去生硬的套
结合源代码进行分析
优秀作业-曲直:
SPOT法则告诉我们任何知识点在系统内部都 应该有一个唯一、明确、权威的表述,因为重复都 可能会导致矛盾,产生隐藏的问题。在这个工程中, 有时要从一个完整的路径中获得文件名,这个本来 算法很简单,就是取从最后一个“/”后的所有内容:
使用递归函数-谢佳亮
#!/bin/bash
function doit { cd "$1" for filename in * do newname=`echo "$filename" | tr [A-Z] [a-z]` if [ $newname != $filename ] then mv $filename $newname fi if [ -d $newname ] then doit $newname fi done cd ..
}
作业常见问题(1/3)
问题一:
使用find或者ls命令,并在用tr将文件名转为小写之前,没有 将文件路径名分解为dirname和basename分别处理。
导致的问题:输入的文件夹路径名中不能含有大写
cvpn.sh ./tmp/ABC 假如该文件夹下有Dir1; dir2
mv ./tmp/ABC/Dir1 ./tmp/abc/dir1
导致的问题
-_-@-_ name@-
作业常见问题(3/6)
问题三:
要求必须是单词的开头或结尾
例如
\b[-a-z0-9._]+@[-a-z0-9.]+\.[a-z]{2,4}\b
导致的问题
mailto:name@pku.edu.cn
作业常见问题(4/6)
问题四:
将特殊字符与数字、字母混为一谈
曲直 李锭 李诗雨 等等…
由于是静态函数,所以也不会产生多少额外开销, 但代码的清晰程度却提高了。
第三次作业:Linux启动过程详述
题目: 描述Linux的启动过程, 包括 Grub/Grub2->kernel->init>inittab->getty->login>sh的整个流程.
Linux启动过程(1/2)
作业常见问题(3/3)
问题三:
递归时的参数使用$dir/$name拼接而成
导致的问题:输入的文件夹路径名不能以‘/’结尾
if [ -d $Name ]; then DirList=`ls $Name` for name in $DirList do cvpn.sh $Name/$name done
在此之后,将找不到./tmp/ABC/dir2 !
作业常见问题(2/3)
问题二:
使用mv 命令之前没有判断oldname是否等于newname
导致的问题:不能含有名字为小写的文件或子目录
newfile="`dirname $file`/`basename $file | tr [A-Z] [a-z]`" mv $file $newfile 然而,mv ./tmp/a ./tmp/a 的结果?