如何系统地学习Shell编程

&&&&shell编程从入门到精通.pdf
shell编程从入门到精通.pdf
Linux Shell编程从入门到精通
《Linux Shell编程从入门到精通》由浅入深、循序渐进地详细讲解了Linux Shell编程的基本知识。这些基本知识包括Shell编程的基本知识、文本处理的工具和方法、正则表达式、Linux系统知识等。
  《Linux Shell编程从入门到精通》旨在通过理清Linux Shell编程的脉络,从基本概念着手,以丰富、实用的范例作为辅助,使读者能够深入浅出的学习Linux Shell编程。
  《Linux Shell编程从入门到精通》的每一章节都配有综合案例,这些综合案例不仅可以使读者复习前面所学的知识,还可以增加开发项目的经验。这些案例实用性很强,许多代码可以直接应用到Linux系统管理中。
  《Linux Shell编程从入门到精通》配有全程录像的视频讲解光盘,读者可以将视频和书结合起来学习,可以更快、更好地掌握Linux Shell编程技术。
  《Linux Shell编程从入门到精通》适合于Linux Shell编程的初学者,有一定Linux Shell编程基础,但还需要进一步提高的人阅读。本书对于有一定编程经验的程序员也有很好的参考价值。
第1章 第一个Shell程序 
1.1 第一道菜 
1.2 如何运行程序 
1.2.1 选婿:位于第一行的#! 
1.2.2 找茬:程序执行的差异 
1.2.3 shell的命令种类 
1.3 Linux Shell的变量 
1.3.1 变量 
1.3.2 用echo输出变量 
1.3.3 环境变量的相关操作 
1.3.4 shell中一些常用环境变量 
1.4 Linux Shell是解释型语言 
1.4.1 编译型语言与解释型语言 
1.4.2 Linux Shell编程的优势 
1.5 小结 
第2章 Shell编程基础 
2.1 向脚本传递参数 
2.1.1 Shell脚本的参数 
2.1.2 参数的用途 
2.2 I/O重定向 
2.2.1 标准输入、标准输出与标准错误 
2.2.2 管道与重定向 
2.2.3 文件描述符 
2.2.4 特殊文件的妙用 
2.3 基本文本检索 
2.4 UNIX/Linux系统的设计与shell 编程 
2.4.1 一切皆文件 
2.4.2 UNIX编程的基本原则 
2.5 小结 
第3章 编程的基本元素 
3.1 再识变量 
3.1.1 用户变量 
3.1.2 位置变量 
3.1.3 环境变量 
3.1.4 启动文件 
3.2 函数 
3.2.1 函数定义 
3.2.2 函数的参数和返回值 
3.3 条件控制与流程控制 
3.3.1 if/else语句 
3.3.2 退出状态 
3.3.3 退出状态与逻辑操作 
3.3.4 条件测试 
3.4 循环控制 
3.4.1 for循环 
3.4.2 while/until循环 
3.4.3 跳出循环 
3.4.4 循环实例 
3.5 小结 
第4章 正则表达式 
4.1 什么是正则表达式 
4.1.1 正则表达式的广泛应用 
4.1.2 如何学习正则表达式 
4.1.3 如何实践正则表达式 
4.2 正则基础 
4.2.1 元字符 
4.2.2 单个字符 
4.2.3 单个表达式匹配多个字符 
4.2.4 文本匹配锚点 
4.2.5 运算符优先级 
4.2.6 更多差异 
4.3 正则表达式的应用 
4.3.1 扩展 
4.3.2 案例研究:罗马数字 
4.3.3 案例研究:解析电话号码 
4.4 小结 
第5章 基本文本处理 
5.1 排序文本 
5.1.1 sort命令的行排序 
5.1.2 sort命令的字段排序 
5.1.3 sort小结 
5.2 文本去重 
5.3 统计文本行数、字数以及字 符数 
5.4 打印和格式化输出 
5.4.1 使用pr打印文件 
5.4.2 使用fmt命令格式化文本 
5.4.3 使用fold限制文本宽度 
5.5 提取文本开头和结尾 
5.6 字段处理 
5.6.1 字段的使用案例 
5.6.2 使用cut取出字段 
5.6.3 使用join连接字段 
5.6.4 其他字段处理方法 
5.7 文本替换 
5.7.1 使用tr替换字符 
5.7.2 其他选择 
5.8 一个稍微复杂的例子 
5.8.1 实例描述 
5.8.2 取出记录的ip字段和id字段 
5.8.3 将记录按照IP顺序排序 
5.8.4 使用uniq统计重复IP 
5.8.5 根据访问次数进行排序 
5.8.6 提取出现次数最多的100条 
5.9 小结 
第6章 文件和文件系统 
6.1 文件 
6.1.1 列出文件 
6.1.2 文件的类型 
6.1.3 文件的权限 
6.1.4 文件的修改时间 
6.2 寻找文件 
6.2.1 find命令的参数 
6.2.2 遍历文件 
6.3 比较文件 
6.3.1 使用comm比较排序后文件 
6.3.2 使用diff比较文件 
6.3.3 其他文本比较方法 
6.4 文件系统 
6.4.1 什么是文件系统 
6.4.2 文件系统与磁盘分区 
6.4.3 Linux分区格式的选择与安全性 
6.4.4 文件系统与目录树 
6.4.5 文件系统的创建与挂载 
6.5 小结 
第7章 流编辑 
7.1 什么是sed 
7.1.1 挑选编辑器 
7.1.2 sed的版本 
7.2 sed示例 
7.2.1 sed的工作方式 
7.2.2 sed工作的地址范围 
7.2.3 规则表达式 
7.3 更强大的sed功能 
7.3.1 替换 
7.3.2 地址范围的迷惑 
7.4 组合命令 
7.4.1 组合多条命令 
7.4.2 将多条命令应用到一个地址范围 
7.5 实际的例子 
7.6 sed实践 
7.6.1 第一步 替换名字 
7.6.2 第二步 删除前3行 
7.6.3 第三步 显示5~10行 
7.6.4 第四步 删除包含Lane的行 
7.6.5 第五步 显示生日在November-December之间的行 
7.6.6 第六步 把3个星号(***)添加到以Fred开头的行 
7.6.7 第七步 用JOSE HASRETIRED取代包含Jose的行 
7.6.8 第八步 把Popeye的生日改成11/14/46 
7.6.9 第九步 删除所有空白行 
7.6.10 第十步 脚本 
7.7 小结 
第8章 文本处理利器awk 
嵌到我的页面
<input type="text" readonly="true" value="">
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
操作系统下载排行shell学习笔记(一)shell编程介绍
shell学习笔记(一)shell编程介绍
&================================================================
此次分享bash shell 学习心得,根据周朝剑老师的shell编程视频整理成文档形式与大家分享,周老师教程视频讲得非常棒,支持一下.
参考文档:
参考书籍:UNIX.shell范例精解(第4版)
送给blog友一句话:
把你们所学所想尝试记录下来和大家分享,做这个事情的时候,人总是很害怕出错误,觉得这样写,别人会不会看得懂,别人会不会觉得我写的很烂等等,就
是因为这样,让自己主动去查询更多的资料,理解透彻这方面知识,再整理属于自己的文档,分享在blog上,以当着以后备用查询,在这个过程中,可能会觉得
比较辛苦,但你会无意识让自己对某些技术有深入的理解,这是我用来提高学习效率一种方式,不是为别人,其实都是为了自己.不信你可以试试.
&================================================================
Unix与linux shell简介
Shell脚本使用范围
硬链接和软链接的区别
================================================================
Unix与linux shell简介
Unix 多用户 多任务&&&& AT&T Ken Thompson&& 1969
Unix系统的心脏是内核:一个系统引导时加载的程序,内核用于与硬件设备打交道,调度任务 管理内存和辅存
内核在系统引导时载入内存,管理系统直至关机,它创建和控制进程,管理内存,文件系统和通信等,内核以外的所有其他程序(shell)都保存在磁盘上,内核将这些程序加载到内存中运行,并在它们终止后清理系统
Linux&&& Linus Torvalds (李纳斯·托沃兹) 1991&&& 企鹅&& linux官方吉祥物 Tux
Korn shell ---AT&T UNIX&&& bash shell ---Linux
FSF 自由软件基金会 1985&& GNU(GNU's Not Unix)&& GPL 通用公共许可证
Linux结合GNU工具诞生完全自由操作系统 1992
POSIX (protable operating system interface)可移植操作系统接口
Shell是核心程序(kernel)之外的指令解析器,是一个程序,同时是一种命令语言和程序设计语言
/etc/shells 查看系统有几个shell版本
&echo $SHELL 查看系统目前使用shell版本
当用户登录系统成功,系统会启动一个交互式的shell来提示用户输入命令
Shell执行:先解析命令行,再处理通配符,重定向,管道和作业控制,然后查找命令,找到后开始执行.
Steven Bourne&Bourne shell&1978前后编写
Bash (Bourne Again shell)增强的Bourne shell&
[1]作者名叫Steven
Bourne,“bourne”与“borne”的发音相近,而born有“出生”和“忍受”的含义。[2]Bourne-Again字面意思代表了它是
shell”l的一种扩展,而暗示“borne-again”、“born-again”则有“重生”和“再次忍受”的意思。(我想作者应该更喜欢“重
生”)[3]它的简写“bash”的意思是“重击”,暗示它的出现是一次强有力的重击。
Shell 顺序判定命令类型
(1)&&&&&& 别名
(2)&&&&&& 关键字
(3)&&&&&& 函数
(4)&&&&&& 内置命令
(5)&&&&&& 可执行程序
用户需要在/bin/login验证下才能登录到系统
Child 子进程&parent 父进程
Shell脚本使用范围
& & & & & &
&&&&&&& 资源密集型的任务,尤其在需要考虑效率时(比如,排序,hash等等)
& & & & 需要处理大任务的数学操作,尤其是浮点运算,精确运算,或者复杂的算术运算(这&&
&&&&&&& 种情况一般使用C++或FORTRAN来处理)
& & & & 有跨平台移植需求(一般使用C或Java)
& & & & 复杂的应用,在必须使用结构化编程的时候(需要变量的类型检查,函数原型,等等)
& & & & 对于影响系统全局性的关键任务应用。
& & & & 对于安全有很高要求的任务,比如你需要一个健壮的系统来防止入侵,破解,恶破&
&&&&&& 坏等等。
& & & & 项目由连串的依赖的各个部分组成。
& & & & 需要大规模的文件操作
& & & & 需要多维数组的支持
& & & & 需要数据结构的支持,比如链表或数等数据结构
& & & & 需要产生或操作图形化界面GUI
& & & & 需要直接操作系统硬件
& & & & 需要I/O或socket接口
& & & & 需要使用库或者遗留下来的老代码的接口
& & & & 私人的,闭源的应用(shell脚本把代码就放在文本文件中,全世界都能看到)&
权限有10位字符
R 4 W 2 X 1
默认文件权限为666-022=644
默认目录权限为777-022=755
b c &&外围设备
S P &&数据结构 管道
l&&&& 符号链接文件
-&&&&&&&&& &普通文件
s/S(SUID)&&&& 可执行的文件搭配这个权限,便能得到特权 任意存取该文件的所有者能使用的全部系统资源
s/S(GUID)&& 如果目录被设置为特殊权限,则所有被复制到这个目录下的文件,其所属的用户组都会被重设为和这个目录一样 &除非加上-p(Preserver 保留文件属性)
t/T (Sticky 粘着)&&& 临时文件/tmp&& /var/tmp&准许其拥有者去删除 移动 避免不守法的用户故意骚扰
因为特殊权限占用x的位置来表示
开启执行权限和特殊权限 则权限表示字符是小写 倘若关闭执行权限 则符合会变成大写
Chmod 755 file
Chmod u+x;g+x file
Chmod a=r file&即所有权限被重置为新的值
Chmod 777 /tmp
Chmod –R 777 /tmp 将整个tmp目录与其中的文件和子目录的权限统称为
Chown root:root file
Chown –R root file 递归
硬链接和软链接的区别
一 链接文件
&&& 链接有两种方式,软链接和硬链接。
  1 软链接文件
软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。
&&& 链接文件甚至可以链接不存在的文件,这就产生一般称之为"断链"的问题(或曰“现象"),链接文件甚至可以循环链接自己。类似于编程语言中的递归。
  用ln -s 命令可以生成一个软连接,如下:
  [root@linux236 test]# ln -s& source_file softlink_file
  在对符号文件进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作,但删除链接文件时,系统仅仅删除链接文件,而不删除源文件本身。
  2 硬链接文件
  info ln 命令告诉您,硬链接是已存在文件的另一个名字(A "hard link" is another name for an existing file),这多少有些令人困惑。硬连接的命令是
  ln -d existfile newfile
  硬链接文件有两个限制
  1)、不允许给目录创建硬链接;
  2)、只有在同一文件系统中的文件之间才能创建链接。
  对硬链接文件进行读写和删除操作时候,结果和软链接相同。但如果我们删除硬链接文件的源文件,硬链接文件仍然存在,而且保留了愿有的内容。
&&& 这时,系统就“忘记”了它曾经是硬链接文件。而把他当成一个普通文件。
二&两者之间的区别
&&& 硬连接指通过索引节点来进行的连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。
&&& 在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要
&&& 文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个
&&& 连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件才会被真正删除。
&&& 软链接文件有点类似于Windows的快捷方式。它实际上是特殊文件的一种。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
Nuhup command &&把命令放在后台运行
Jobs –l&&&&& 查看后台信息
发表评论:
TA的最新馆藏谈谈 Shell 该怎么学
[问题点数:300分,结帖人freezezdj]
谈谈 Shell 该怎么学
[问题点数:300分,结帖人freezezdj]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2011年8月 C/C++大版内专家分月排行榜第二
2007年7月 C/C++大版内专家分月排行榜第一2007年6月 C/C++大版内专家分月排行榜第一2007年5月 C/C++大版内专家分月排行榜第一2007年4月 C/C++大版内专家分月排行榜第一2007年3月 C/C++大版内专家分月排行榜第一2007年2月 C/C++大版内专家分月排行榜第一2007年1月 C/C++大版内专家分月排行榜第一2006年12月 C/C++大版内专家分月排行榜第一2006年11月 C/C++大版内专家分月排行榜第一2006年9月 C/C++大版内专家分月排行榜第一2006年8月 C/C++大版内专家分月排行榜第一2006年7月 C/C++大版内专家分月排行榜第一2006年6月 C/C++大版内专家分月排行榜第一2006年5月 C/C++大版内专家分月排行榜第一2006年4月 C/C++大版内专家分月排行榜第一2006年3月 C/C++大版内专家分月排行榜第一2005年8月 C/C++大版内专家分月排行榜第一
2007年8月 C/C++大版内专家分月排行榜第二2006年10月 C/C++大版内专家分月排行榜第二
2010年8月 Linux/Unix社区大版内专家分月排行榜第三2010年3月 Linux/Unix社区大版内专家分月排行榜第三
2012年5月 专题开发/技术/项目大版内专家分月排行榜第二2010年3月 C/C++大版内专家分月排行榜第二
2012年4月 Linux/Unix社区大版内专家分月排行榜第三2011年7月 Linux/Unix社区大版内专家分月排行榜第三2010年2月 C/C++大版内专家分月排行榜第三
2013年1月 移动平台大版内专家分月排行榜第三
2012年8月 C/C++大版内专家分月排行榜第三2012年7月 C/C++大版内专家分月排行榜第三
2012年8月 C/C++大版内专家分月排行榜第三2012年7月 C/C++大版内专家分月排行榜第三
2011年9月 C/C++大版内专家分月排行榜第二2011年4月 C/C++大版内专家分月排行榜第二2010年11月 C/C++大版内专家分月排行榜第二
2011年6月 C/C++大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。linux shell 编程如何学习? - 开源中国社区
当前访客身份:游客 [
当前位置:
文件格式如下:要求提取出数字 GPS&&& : (Apr 22, 05& 06:13:01) (N 19:48.5264)(E 115:19.4939) (5.3kt 148d) Mark 265 GPS&&& : (Apr 22, 05& 06:13:41) (N 29:48.4748)(E 115:19.5194) (4.9kt 161d) Mark 1
变为: 22& 05& 06:13:01& 19:48.5264&& 115:19.4939&& 5.3& 148&& 265 22& 05& 06:13:41& 29:48.4748&& 115:19.5194&& 4.9& 161&& 1
sed -r 's/[^0-9:.]{2,}/ /g;s,:,,;s,^ +,,' 或者sed -r 's/[a-zA-Z(),: ]{2,}/ /g' sed 's/[^0-9]*\([0-9:.]*\)/\1 /g;s/.$//' urfile
tr -d &[a-zA-Z(),]& & urfile | sed -r 's/^.{7}//'
看了这些shell,我真心感觉头都大了,不知道大家如何学习linux shell的?感觉这些shell像天书呀,不知道是不是自己比较笨呢,还是linux shell 真的很难?或者我的学习方法有问题。
我目前的做法,希望通过阅读其他人的shell来提升自己的shell水平。
共有3个答案
<span class="a_vote_num" id="a_vote_num_
学习方法吧
linux shell编程相关的很多书籍都有提及
多利用网络搜索
<span class="a_vote_num" id="a_vote_num_
sed其实就是一个工具,跟我们常用的ping一样。多用多看man就熟悉了。如果一个不懂电脑的人用ping也头大。
<span class="a_vote_num" id="a_vote_num_
tr -d &[a-zA-Z(),]& & urfile | sed -r 's/^.{7}//'
将urfile文件中的所有字母(包括大小写),以及括号和逗号,都删除掉。然后在把开头的7个字符删掉。就行了。在说说sed -r,-r使用扩展的正则表达式,如果没有-r的话,这里就要这样使用sed 's/^.\{7\}//'
sed -r 's/[^0-9:.]{2,}/ /g;s,:,,;s,^ +,,' 这个根据分号分为三部分,第一部分就是把所有的不需要的字符使用空格替换掉。第二部分就是把第一个冒号去掉,第三部就是把开头的空格去掉。
不过脚本这些东西,有些确实很复杂,不花点时间写或者读,还真头痛。
更多开发者职位上
有什么技术问题吗?
天王盖地...的其它问题
类似的话题

我要回帖

 

随机推荐