鸟哥 SHELL 经典入门材料!zt
[code:1]鸟哥 SHELL 经典入门材料!
学习 Shell Scripts
如果您真的很想要走信息这条路,并且想要好好的管理好属于您的主机,那么,别说鸟哥不告诉您, Shell Scripts 真的是必须要学习的一项课题呢!基本上, shell script 有点像是早期的批次档,亦即是将一些指令汇整起来一次执行,但是 Shell script 拥有更强大的功能,那就是, 他可以进行类似程序 (program) 的撰写,并且,不需要经过编译 (compiler) 就能够执行, 真的很方便。加上,我们可透过 shell script 来简化我们日常的工作管理, 而且,整个 Linux 环境中,一些服务 (services) 的启动都是透过 shell script 的,如果您对于 script 不了解,嘿嘿!发生问题时,可真是会求助无门喔! 所以,好好的学一学他吧!
1. 什么是 Shell Script
1.1 干嘛学习 shell scripts?
1.2 第一支 script 的撰写与执行
1.3 撰写 shell script 的良好习惯建立
2. 简单的 shell script 练习:
3. 善用判断式:
3.1 利用 test 指令的测试功能
3.2 利用判断符号 [ ]
3.3 Shell script 的预设变数($0, $1...)
4. 条件判断式:
4.1 利用 if .... then
4.2 利用 case ..... esac 判断
4.3 利用 function 功能
5. 循环 (loop)
5.1 while....do....done, until....do....done
5.2 for...do...done
6. shell script 的追踪与 debug
7. 本章习题练习
--------------------------------------------------------------------------------
什么是 Shell scripts ?
这个有趣的问题赶紧来回答看看,什么是 shell script 呢? shell 我们在 认识 bash 当中已经提过了,那是一个文字接口底下让我们与系统沟通的一个工具接口,那么 script 是啥? 字面上的意义, script 是『脚本、剧本』的意思。整句话是说, shell script 是针对 shell 所写的『剧本!』 什么东西啊?呵呵!其实, shell script 是利用 shell 的功能所写的一个『程序 (program)』,这个程序是使用纯文字文件,将一些 shell 的语法与指令写在里面, 搭配正规表示法、管线命令与数据流重导向等功能,以达到我们所想要的处理目的。
所以,简单的说, shell script 就像是早期 DOS 年代的批次檔 (.bat) ,最简单的功能就是将许多指令汇整写在一起, 让使用者很轻易的就能够 one touch (执行一个档案 "shell script" ,就能够一次执行多个指令), 而, shell script 更提供数组、循环、条件与逻辑判断等重要功能,让使用者也可以直接以 shell 来撰写程序,而不必使用类似 C 程序语言等传统程序撰写的语法呢!
那,这么说您可以了解了吗?是的! shell script 可以简单的被看成是批次档, 也可以被说成是一个程序语言,且这个程序语言由于都是利用 shell 与相关工具指令, 所以不需要编译即可执行,且拥有不错的除错 (debug) 工具,所以,他可以帮助系统管理员快速的管理好主机。
--------------------------------------------------------------------------------
干嘛学习 shell scripts?
这是个好问题,我又干嘛一定要学 shell script ?我又不是信息人,没有写程序的概念, 那我干嘛还要学 shell script 呢?不要学可不可以啊?呵呵~如果 Linux 对您而言, 您只是想要『会用』而已,那么,不需要学 shell script 也还无所谓,这部分先给他跳过去, 等到有空的时候,再来好好的瞧一瞧。但是,如果您是真的想要玩清楚 Linux 的来龙去脉, 那么 shell script 就不可不知,为什么呢?因为:
自动化管理的重要依据:
不用鸟哥说您也知道,管理一部主机真不是件简单的事情,每天要进行的任务就有: 查询登录档、追踪流量、监控使用者使用主机状态、主机各项硬设备状态、主机软件更新查询、更不要说得应付其它使用者的突然要求了。而这些工作,您想要自行手动处理,还是写个简单的程序来帮您每日自动处理分析,若有问题才通知您呢? 当然是让系统自动工作比较好,对吧!呵呵~这就得要良好的 shell script 来帮忙的啦!
追踪与管理系统的重要工作:
虽然我们还没有提到服务启动的方法,不过,这里可以先提一下,我们 Linux 系统的服务 ( services ) 启动的接口,在 /etc/init.d/ 这个目录下,所有的档案都是 scripts ; 另外,包括开机 (booting) 过程也都是利用 shell script 来帮忙搜寻系统的相关设定数据,然后再代入各个服务的设定参数啊!举例来说,如果我们想要重新启动系统登录文件, 可以使用:『/etc/init.d/syslogd restart』,那个 syslogd 档案就是 script 啦! 另外,我曾经在某一代的 FC 上面发现,启动 MySQL 这个数据库服务时,确实是可以启动的, 但是屏幕上却老是出现『failure』,后来才发现,原来是启动 MySQL 那个 script 会主动的以『空的密码』去尝试登入 MySQL ,但我修改过 MySQL 的密码啰~当然就登入失败~ 后来改了改 script ,就略去这个问题啦!如此说来, script 确实是需要学习的啊!
简单入侵侦测功能:
当我们的系统有异状时,大多会将这些异状记录在系统记录器,也就是我们常提到的『系统登录文件』,那么我们可以在固定的几分钟内主动的去分析系统登录文件,若察觉有问题,就立刻通报管理员,或者是立刻加强防火墙的设定规则,如此一来,您的主机可就能够达到『自我保护』的聪明学习功能啦~ 举例来说,我们可以通过 shell script 去分析『当该封包尝试几次还是联机失败之后,就予以抵挡住该 IP』之类的举动,例如鸟哥写过一个关于抵挡砍站软件的 shell script ,就是用这个想法去达成的呢!
连续指令单一化:
其实,对于新手而言, script 最简单的功能就是:『汇整一些在 command line 下达的连续指令,将他写入 scripts 当中,而由直接执行 scripts 来启动一连串的 command line 指令输出入!』例如: 防火墙连续规则 ( iptables ),开机加载程序的项目 ( 就是在 /etc/rc.d/rc.local 里头的数据 ) ,等等都是相似的功能啦! 其实,说穿了,如果不考虑 program 的部分,那么 scripts 也可以想成,仅是帮我们把一大串的指令汇整在一个档案里面, 而直接执行该档案就可以执行那一串又臭又长的指令段!就是这么简单啦!
简易的数据处理:
由前一章 正规表示法 的 awk 程序说明中, 您可以发现, awk 可以用来处理简单的数据数据呢!例如薪资单的处理啊等等的。 shell script 的功能更强大,例如鸟哥曾经用 shell script 直接处理数据数据的比对啊,文字数据的处理啊等等的,撰写方便,速度又快(因为在 Linux 效能较佳), 真的是很不错用的啦!
跨平台支持与学习历程较短:
几乎所有的 Unix Like 上面都可以跑 shell script ,连 MS Windows 系列也有相关的仿真器可以用, 此外, shell script 的语法是相当亲和的,看都看的懂得文字,而不是机器码, 很容易学习~这些都是您可以加以考虑的学习点啊!
上面这些都是您考虑学习 shell script 的特点~此外, shell script 还可以简单的以 vi 来直接编写,实在是很方便的好东西!所以,还是建议您学习一下啦。
不过,虽然 shell script 号称是程序 (program) ,但实际上, shell script 处理数据的速度上是不太够的。因为 shell script 用的是外部的指令与 bash shell 的一些预设工具,所以,他常常会去呼叫外部的函式库,因此,运算速度上面当然比不上传统的程序语言。 所以啰, shell script 用在系统管理上面是很好的一项工具,但是用在处理大量数值运算上, 就不够好了~而且还很麻烦,因为:Shell scripts 的速度较慢,且使用的 CPU 资源较多,造成主机资源的分配不良。还好, 我们确实很少看到利用 shell script 在进行大量数据运算的,所以,不必担心的啦!
[/code:1]