shell script(bash)简介 【程序编程相关:91游戏制作联盟大型专题:《2004年游】
【推荐阅读:3D游戏引擎设计与实现(10)】 【扩展信息:渲染fur】 众所皆知地,unix上以小工具著名,利用许多简单的小工具,来完成原本需要大量软体开发的工作,这一点特色,使得unix成为许多人心目中理想的系统平台. 在众多的小工具中,shell script算得上是最基本.最强大.运用最广泛的一个.它运用围之广,不但从系统启动.程式编译.定期作业.上网连线,甚至安装整个linux系统,都可以用它来完成. 因为shell script是利用您平日在使用的一些指令,将之组合起来,成为一个"程式".如果您平日某些序列的指令下得特别频繁,便可以将这些指令组合起来,成为另一个新的指令.这样,不但可以简化并加速操作速度,甚至还可以干脆自动定期执行,大大简化系统管理工作. ************************* bash(gnu bourne-again shell)是许多linux平台的内定shell,事实上,还有许多传统unix上用的shell,像tcsh.csh.ash.bsh.ksh等等,shell script大致都类同,当您学会一种shell以后,其它的shell会很快就上手,大多数的时候,一个shell script通常可以在很多种shell上使用. 这里我介绍您bash的使用方法.事实上,当您"man bash"时,就可以看到bash的说明书,不过对许多人来说,这份说明书犹如"无字天书"一样难懂.这份文件,主要资料来源为"man bash",我加上一些实际日常的应用例来说明.希望这样能让那些始终不得其门而入的人们,多多少少能有点概念. 教学例子 "hello world" shell script 照传统程式教学例,这一节介绍shell script的"hello world"如何撰写. ************************* #!/bin/sh # filename : hello echo "hello world!" ************************* 大家应该会注意到第一行的"#!/bin/sh".在unix下,所有的可执行script,不管是那一种语言,其开头都是"#!",例如perl是"#!/usr/bin/perl",tcl/tk是"#!/usr/bin/wish",看您要执行的script程式位置在那里.您也可以用"#!/bin/bash"."#!/bin/tcsh"等等,来指定使用特定的shell. echo是个bash的内建指令. ************************* 接下来,执行hello这个script: 要执行一个script的方式有很多种. ************************* 第一种 : 将hello这个档案的权限设定为可执行. [foxman@foxman bash]# chmod 755 hello 执行 [foxman@foxman bash]# ./hello hello world ************************* 第二种 : 使用bash内建指令"source"或".". [foxman@foxman bash]# source hello hello world 或 [foxman@foxman bash]# . hello hello world ************************* 第三种 : 直接使用sh/bash/tcsh指令来执行. [foxman@foxman bash]# sh hello hello world 或 [foxman@foxman bash]# bash hello hello world ************************* bash执行选项 ************************* -c string : 读取string来当命令. -i : 互动介面. -s : 由stdin读取命令. - : 取消往后选项的读取. -norc : 不要读~/.bashrc来执行. -noprofile : 不要读/etc/profile.~/.bash_profile.~/.bash_login.~/.profile等等来执行. -rcfile filename : 执行filename,而非~/.bashrc -version : 显示版本. -quiet : 启动时不要哩唆. -login : 确保bash是个login shell. -nobraceexpansion : 不要用curly brace expansion({}符号展开). -nolineediting : 不用readline来读取命令列. -posix : 改采posix 1003.2标准. 用于自动备份的shell script 一个用于自动备份的shell script 我们先前提到,可利用shell script搭配crond来作定期的工作.要作定期性的工作,在unix上,就是与crond的搭配运用. ************************* 首先我们先来研究如何对系统进行备份. 要对系统进行备份,不外乎便是利用一些压缩工具.在许多unix系统上,tar及gzip是de facto的资料交换标准.我们经 常可以看见一些tar.gz或tgz档,这些档案,被称为tarball.当然了,您也可以用bzip2.zip等等压缩工具来进行压缩,不必限定于gzip.但tar配合gzip是最普遍的,也是最方便的方式. 要将我们想要的资料压缩起来,进行备份,可以结合tar及gzip一起进行.方式有很多种,最常用的指令是以下这一种: tar -c file/dir ... | gzip -9 > xxxx.tar.gz 您也可以分开来做: tar -r file/dir ... -f xxxx.tar gzip -9 xxxx.tar 或 tar -r file/dir ... -f xxxx.tar gzip -9 xxxx.tar.gz ************************* 在解过linux下档案备份的基本知识后,我们来写一个将档案备份的script. #!/bin/sh # filename : backup dirs="/etc /var /your_directories_or_files" backup="/tmp/backup.tgz" tar -c $dirs | gzip -9 > $backup 其中dirs放的是您要备份的档案及目录,backup是您的备份档.可不要将/tmp放进dirs中,那样做,您是在做备份的备份,可能将您的硬碟塞爆. ************************* 接下来测试 [foxman@foxman bash]# chmod 755 backup [foxman@foxman bash]# ./backup 执行完成后在/tmp就会有一个backup.tgz,里面储存了您重要的资料.您可用 gzip -dc /tmp/backup.tgz | tar -vt 或 tar vtfz /tmp/backup.tgz 来看看里面的档案列表. 要解开时,可用以下指令来完成复原: gzip -dc /tmp/backup.tgz | tar -xv 或 tar xvfz /tmp/backup.tgz 备份通常是仅备份系统通常最重要的部份,/etc可说是不可缺少的一部份.另外,看您系统中有那些重要的资料需要备份.通常来说,您没有必要备份/bin./sbin./usr/bin./usr/sbin./usr/x11r6/bin等等这些执行档目录.只要备份您重要的档案即可,别把整个硬碟备份,那是蛮呆的动作. ************************* 如果您有许多台机器,可利用其中一台任务较轻的内部网路主机,做为主要备份主机.将所有机器都自动执行备份,然后利用nfs/coda/samba等网路档案系统,将备份的资料放到该备份机器中,该机器则定时收取备份资料,然后您再由该机器中进行一次备份. 这里是整个系统备份方案的图示. 在您进行之前,先解一下,系统中那些是要备份的,那些是不需要的. ************************* 新的backup #!/bin/sh hostname=`hostname` ... 下一页