当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 想玩转bash吗? 那么进入bash编程教学 Shell Script(bash)简介 众所皆知地,UNIX上以小工具著名,利用许多简单的小工具,来完成原本需要大量软体开发的工作,这一点特色,使得UNIX成为许多人心目中理想的系统平台。
 

 

 ·sed/awk与unix命令等价代码    »显示摘要«
    摘要:转自: www.chinaunix.net 特此感谢sed与unix 命令等价代码 特此感谢转贴者:admirer ------------------------------------------------------------------------------- cat |sed : cat -s | sed /./,/^$/!d tac | sed 1!g;h;$!d g......
 ·shell游戏:贪吃蛇 修正版    »显示摘要«
    摘要: shell游戏:贪吃蛇 期待各位帮忙测试,如有bug,请及时告知,谢谢 转载请保持版权声明完整,十分感谢 下载代码: [url]http://bitbull.cn/works/snake[/url] 六关卡屏幕截图: [url]http://bitbull.cn/pic/blog/2005072801.jpg[/url] [url]http://bitbull.cn/pic/blog/......


bash入门教程
想玩转bash吗? 那么进入bash编程教学

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` 


...   下一页
 ·用awk数组处理两个文件的例子    »显示摘要«
    摘要: 收了本论坛的三个例子 [quote:b425e56bf6]1、用某一文件的一个域替换另一个文件中的的特定域? http://bbs.chinaunix.net/forum/viewtopic.php?t=500015 文件passwd: s2002408030068:x:527:527::/home/dz02/s2002408030068:/bin/pw s2002408032819......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE