最近升级日期:2009/02/18
什么是 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 的特点~此外, shell script 还可以简单的以 vim 来直接编写,实在是很方便的好东西!所以,还是建议你学习一下啦。 不过,虽然 shell script 号称是程序 (program) ,但实际上, shell script 处理数据的速度上是不太够的。因为 shell script 用的是外部的命令与 bash shell 的一些默认工具,所以,他常常会去呼叫外部的函式库,因此,运算速度上面当然比不上传统的程序语言。 所以罗, shell script 用在系统管理上面是很好的一项工具,但是用在处理大量数值运算上, 就不够好了,因为 Shell scripts 的速度较慢,且使用的 CPU 资源较多,造成主机资源的分配不良。还好, 我们通常利用 shell script 来处理服务器的侦测,倒是没有进行大量运算的需求啊!所以不必担心的啦! 第一支 script 的撰写与运行 如同前面讲到的,shell script 其实就是纯文字档,我们可以编辑这个文件,然后让这个文件来帮我们一次运行多个命令, 或者是利用一些运算与逻辑判断来帮我们达成某些功能。所以啦,要编辑这个文件的内容时,当然就需要具备有 bash 命令下达的相关认识。下达命令需要注意的事项在第五章的开始下达命令小节内已经提过,有疑问请自行回去翻阅。 在 shell script 的撰写中还需要用到底下的注意事项:
如此一来,我们在 script 内所撰写的程序,就会被一行一行的运行。现在我们假设你写的这个程序档名是 /home/dmtsai/shell.sh 好了,那如何运行这个文件?很简单,可以有底下几个方法:
反正重点就是要让那个 shell.sh 内的命令可以被运行的意思啦! 咦!那我为何需要使用 『./shell.sh 』来下达命令?忘记了吗?回去第十一章内的命令搜寻顺序察看一下, 你就会知道原因了!同时,由於 CentOS 默认使用者家目录下的 ~/bin 目录会被配置到 $PATH 内,所以你也可以将 shell.sh 创建在 /home/dmtsai/bin/ 底下 ( ~/bin 目录需要自行配置) 。此时,若 shell.sh 在 ~/bin 内且具有 rx 的权限,那就直接输入 shell.sh 即可运行该脚本程序! 那为何『 sh shell.sh 』也可以运行呢?这是因为 /bin/sh 其实就是 /bin/bash (连结档),使用 sh shell.sh
亦即告诉系统,我想要直接以 bash 的功能来运行 shell.sh 这个文件内的相关命令的意思,所以此时你的 shell.sh 只要有 r 的权限即可被运行喔!而我们也可以利用 sh 的参数,如 -n 及 -x
来检查与追踪 shell.sh 的语法是否正确呢! ^_^
在武侠世界中,不论是那个门派,要学武功要从扫地做起,那么要学程序呢?呵呵,肯定是由『秀出 Hello World!』 这个字眼开始的!OK!那么鸟哥就先写一支 script 给大家瞧一瞧:
在本章当中,请将所有撰写的 script 放置到你家目录的 ~/scripts 这个目录内, 未来比较好管理啦!上面的写法当中,鸟哥主要将整个程序的撰写分成数段,大致是这样:
接下来透过刚刚上头介绍的运行方法来运行看看结果吧!
你会看到萤幕是这样,而且应该还会听到『咚』的一声,为什么呢?还记得前一章提到的 printf 吧?用 echo 接著那些特殊的按键也可以发生同样的事情~ 不过, echo 必须要加上 -e 的选项才行!呵呵!在你写完这个小 script 之后,你就可以大声的说:『我也会写程序了』!哈哈! 很简单有趣吧~ ^_^ 另外,你也可以利用:『chmod a+x sh01.sh; ./sh01.sh』来运行这个 script 的呢! 撰写 shell script 的良好习惯创建 一个良好习惯的养成是很重要的~大家在刚开始撰写程序的时候,最容易忽略这部分, 认为程序写出来就好了,其他的不重要。其实,如果程序的说明能够更清楚,那么对你自己是有很大的帮助的。 举例来说,鸟哥自己为了自己的需求,曾经撰写了不少的 script 来帮我进行主机 IP 的侦测啊、 登录档分析与管理啊、自动上传下载重要配置档啊等等的,不过,早期就是因为太懒了, 管理的主机又太多了,常常同一个程序在不同的主机上面进行更改,到最后,到底哪一支才是最新的都记不起来, 而且,重点是,我到底是改了哪里?为什么做那样的修改?都忘的一干二净~真要命~ 所以,后来鸟哥在写程序的时候,通常会比较仔细的将程序的设计过程给他记录下来,而且还会记录一些历史纪录, 如此一来,好多了~至少很容易知道我修改了哪些数据,以及程序修改的理念与逻辑概念等等, 在维护上面是轻松很多很多的喔! 另外,在一些环境的配置上面,毕竟每个人的环境都不相同,为了取得较佳的运行环境, 我都会自行先定义好一些一定会被用到的环境变量,例如 PATH 这个玩意儿! 这样比较好啦~所以说,建议你一定要养成良好的 script 撰写习惯,在每个 script 的档头处记录好:
除了记录这些资讯之外,在较为特殊的程序码部分,个人建议务必要加上注解说明,可以帮助你非常非常多! 此外,程序码的撰写最好使用巢状方式,在包覆的内部程序码最好能以 [tab] 按键的空格向后推, 这样你的程序码会显的非常的漂亮与有条理!在查阅与 debug 上较为轻松愉快喔! 另外,使用撰写 script 的工具最好使用 vim 而不是 vi ,因为 vim 会有额外的语法检验机制,能够在第一阶段撰写时就发现语法方面的问题喔! |
||||
本网页主要以Firefox配合解析度 1024x768 作为设计依据 鸟哥自由软件整合应用研究室