没有合适的资源?快使用搜索试试~ 我知道了~
鸟哥的 Linux 私房菜第13章-学习 Shell Scripts1
需积分: 0 1 下载量 133 浏览量
2022-08-04
00:08:51
上传
评论
收藏 679KB PDF 举报
温馨提示
试读
46页
第十三章、学习 Shell Scripts最近更新日期:2009/02/18如果你真的很想要走信息这条路,并且想要好好的管理好属于你的主机,那么,别说鸟哥不告诉
资源推荐
资源详情
资源评论
鸟哥的 Linux 私房菜
为取得较佳浏览结果,请爱用 firefox 浏览本网页
第十三章、学习 Shell Scripts
最近更新日期:2009/02/18
如果你真的很想要走信息这条路,并且想要好好的管理好属于你的主机,那么,别说鸟哥不告诉你, 可以自动管
理你的系统的好工具: 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 练习
2.1 简单范例: 对谈式脚本, 随日期变化, 数值运算
2.2 script 的执行方式差异 (source, sh script, ./script)
3. 善用判断式
3.1 利用 test 指令的测试功能
3.2 利用判断符号 [ ]
3.3 Shell script 的默认变数($0, $1...): shift
4. 条件判断式
4.1 利用 if .... then: 单层简单条件, 多重复杂条件, 检验$1 内容, 网
络状态, 退伍
4.2 利用 case ..... esac 判断
4.3 利用 function 功能
5. 循环 (loop)
5.1 while...do...done, until...do...done (不定循环)
5.2 for...do...done (固定循环): 账号检查, 网络状态 $(seq )
5.3 for...do...done 的数值处理
6. shell script 的追踪与 debug
7. 重点回顾
8. 本章习题
9. 参考数据与延伸阅读
10. 针对本文的建议:http://phorum.vbird.org/viewtopic.php?t=23886
什么是 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 就不可
不知,为什么呢?因为:
自动化管理的重要依据:
不用鸟哥说你也知道,管理一部主机真不是件简单的事情,每天要进行的
任务就有: 查询登录档、追踪流量、监控用户使用主机状态、主机各项
硬设备状态、 主机软件更新查询、更不要说得应付其他使用者的突然要
求了。而这些工作的进行可以分为: (1)自行手动处理,或是 (2)写个简
单的程序来帮你每日自动处理分析这两种方式,你觉得哪种方式比较好?
当然是让系统自动工作比较好,对吧!呵呵~这就得要良好的 shell
script 来帮忙的啦!
追踪与管理系统的重要工作:
虽然我们还没有提到服务启动的方法,不过,这里可以先提一下,我们
Linux 系统的服务 (services) 启动的接口是在 /etc/init.d/ 这个目
录下,目录下的所有档案都是 scripts ; 另外,包括开机 (booting) 过
程也都是利用 shell script 来帮忙搜寻系统的相关设定数据, 然后再
代入各个服务的设定参数啊!举例来说,如果我们想要重新启动系统注册
表档, 可以使用:『/etc/init.d/syslogd restart』,那个 syslogd 档
案就是 script 啦!
另外,鸟哥曾经在某一代的 Fedora 上面发现,启动 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 系
列也有相关的 script 仿真器可以用, 此外, shell script 的语法是
相当亲和的,看都看的懂得文字 (虽然是英文),而不是机器码, 很容易
学习~这些都是你可以加以考虑的学习点啊!
上面这些都是你考虑学习 shell script 的特点~此外, shell script 还可以
简单的以 vi 来直接编写,实在是很方便的好东西!所以,还是建议你学习一下
啦。
不过,虽然 shell script 号称是程序 (program) ,但实际上, shell script
处理数据的速度上是不太够的。因为 shell script 用的是外部的指令与 bash
shell 的一些默认工具,所以,他常常会去呼叫外部的函式库,因此,指令周期
上面当然比不上传统的程序语言。 所以啰, shell script 用在系统管理上面
是很好的一项工具,但是用在处理大量数值运算上, 就不够好了,因为 Shell
scripts 的速度较慢,且使用的 CPU 资源较多,造成主机资源的分配不良。还
好, 我们通常利用 shell script 来处理服务器的侦测,倒是没有进行大量运
算的需求啊!所以不必担心的啦!
第一支 script 的撰写与执行
如同前面讲到的,shell script 其实就是纯文本档,我们可以编辑这个档案,
然后让这个档案来帮我们一次执行多个指令, 或者是利用一些运算与逻辑判断
来帮我们达成某些功能。所以啦,要编辑这个档案的内容时,当然就需要具备有
bash 指令下达的相关认识。下达指令需要注意的事项在第五章的开始下达指令
小节内已经提过,有疑问请自行回去翻阅。 在 shell script 的撰写中还需要
用到底下的注意事项:
1. 指令的执行是从上而下、从左而右的分析与执行;
2. 指令的下达就如同第五章内提到的: 指令、选项与参数间的多个空白都
会被忽略掉;
3. 空白行也将被忽略掉,并且 [tab] 按键所推开的空白同样视为空格键;
4. 如果读取到一个 Enter 符号 (CR) ,就尝试开始执行该行 (或该串) 命
令;
5. 至于如果一行的内容太多,则可以使用『 \[Enter] 』来延伸至下一行;
6. 『 # 』可做为批注!任何加在 # 后面的资料将全部被视为批注文字而被
忽略!
如此一来,我们在 script 内所撰写的程序,就会被一行一行的执行。现在我们
假设你写的这个程序文件名是 /home/dmtsai/shell.sh 好了,那如何执行这个
档案?很简单,可以有底下几个方法:
直接指令下达: shell.sh 档案必须要具备可读与可执行 (rx) 的权限,
然后:
o 绝对路径:使用 /home/dmtsai/shell.sh 来下达指令;
o 相对路径:假设工作目录在 /home/dmtsai/ ,则使用 ./shell.sh
来执行
o 变量『PATH』功能:将 shell.sh 放在 PATH 指定的目录内,例如:
~/bin/
以 bash 程序来执行:透过『 bash shell.sh 』或『 sh shell.sh 』来
执行
反正重点就是要让那个 shell.sh 内的指令可以被执行的意思啦! 咦!那我为
何需要使用 『./shell.sh 』来下达指令?忘记了吗?回去第十一章内的指令搜
寻顺序察看一下, 你就会知道原因了!同时,由于 CentOS 默认用户家目录下
的 ~/bin 目录会被设定到 $PATH 内, 所以你也可以将 shell.sh 建立在
/home/dmtsai/bin/ 底下 ( ~/bin 目录需要自行设定) 。 此时,若 shell.sh
在 ~/bin 内且具有 rw 的权限,那就直接输入 shell.sh 即可执行该脚本程序!
那为何『 sh shell.sh 』也可以执行呢?这是因为 /bin/sh 其实就是
/bin/bash (连结档), 使用 sh shell.sh 亦即告诉系统,我想要直接以 bash 的
功能来执行 shell.sh 这个档案内的相关指令的意思, 所以此时你的 shell.sh
只要有 r 的权限即可被执行喔!而我们也可以利用 sh 的参数,如 -n 及 -x 来
检查与追踪 shell.sh 的语法是否正确呢! ^_^
撰写第一支 script
在武侠世界中,不论是那个门派,要学武功要从扫地做起,那么要学程序呢?呵
呵,肯定是由『秀出 Hello World!』 这个字眼开始的!OK!那么鸟哥就先写
一支 script 给大家瞧一瞧:
[root@www ~]# mkdir scripts; cd scripts
[root@www scripts]# vi sh01.sh
#!/bin/bash
# Program:
# This program shows "Hello World!" in your screen.
# History:
# 2005/08/23 VBird First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~
/bin
export PATH
echo -e "Hello World! \a \n"
剩余45页未读,继续阅读
资源评论
臭人鹏
- 粉丝: 20
- 资源: 330
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功