本文结合大量实例阐述如何编写一个shell脚本。

  为什么要进行shell编程

   在Linux系统中,虽然有各种各样的图像化接口工具,但是sell仍然是个很灵活的工具。Shell不但仅是命令的收集,而且是一门很棒的编程 语言。您能够通过使用shell使大量的任务自动化,shell特别擅长系统管理任务,尤其适合那些易用性、可维护性和便携性比效率更重要的任务。




  下面,让我们一起来看看shell是如何工作的:

  建立一个脚本

   Linux中有好多中不同的shell,但是通常我们使用bash (bourne again shell) 进行shell编程,因为bash是免费的并且很容易使用。所以在本文中笔者所提供的脚本都是使用bash(但是在大多数情况下,这些脚本同样能够在 bash的大姐,bourne shell中运行)。

  如同其他语言相同,通过我们使用任意一种文字编辑器,比如nedit、kedit、emacs、vi
  等来编写我们的shell程式。
  程式必须以下面的行开始(必须方在文档的第一行):
  #!/bin/sh

  符号#!用来告诉系统他后面的参数是用来执行该文档的程式。在这个例子中我们使用/bin/sh来执行程式。
  当编辑好脚本时,假如要执行该脚本,还必须使其可执行。
  要使脚本可执行:
  chmod x filename
  然后,您能够通过输入: ./filename 来执行您的脚本。

  注释

  在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程式中使用注释。假如您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。

  变量

  在其他编程语言中您必须使用变量。在shell编程中,任何的变量都由字符串组成,并且您无需对变量进行声明。要赋值给一个变量,您能够这样写:

  变量名=值

  取出变量值能够加一个美元符号($)在变量前面:

  #!/bin/sh
  #对变量赋值:
  a="hello world"
  # 现在打印变量a的内容:
  echo "A is:"
  echo $a

  在您的编辑器中输入以上内容,然后将其保存为一个文档first。之后执行chmod x first
  使其可执行,最后输入./first执行该脚本。
  这个脚本将会输出:
  A is:
  hello world

  有时候变量名很容易和其他文字混淆,比如:
  num=2
  echo "this is the $numnd"
  这并不会打印出"this is the 2nd",而仅仅打印"this is the ",因为shell会去搜索变量numnd的值,但是这个变量时没有值的。能够使用花括号来告诉shell我们要打印的是num变量:
  num=2
  echo "this is the $nd"
  这将打印: this is the 2nd

  有许多变量是系统自动设定的,这将在后面使用这些变量时进行讨论。

  假如您需要处理数学表达式,那么您需要使用诸如expr等程式(见下面)。
  除了一般的仅在程式内有效的shell变量以外,更有环境变量。由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论,因为通常情况下仅仅在登录脚本中使用环境变量。

  Shell命令和流程控制

  在shell脚本中能够使用三类命令:

  1)Unix 命令:

  虽然在shell脚本中能够使用任意的unix命令,但是还是由一些相对更常用的命令。这些命令通常是用来进行文档和文字操作的。


  常用命令语法及功能

  echo "some text": 将文字内容打印在屏幕上

  ls: 文档列表

  wc –l filewc -w filewc -c file: 计算文档行数计算文档中的单词数计算文档中的字符数

  cp sourcefile destfile: 文档拷贝

  mv oldname newname : 重命名文档或移动文档

  rm file: 删除文档

  grep 'pattern' file: 在文档内搜索字符串比如:grep 'searchstring' file.txt

  cut -b colnum file: 指定欲显示的文档内容范围,并将他们输出到标准输出设备比如:输出每行第5个到第9个字符cut -b5-9 file.txt千万不要和cat命令混淆,这是两个完全不同的命令

  cat file.txt: 输出文档内容到标准输出设备(屏幕)上

  file somefile: 得到文档类型

  read var: 提示用户输入,并将输入赋值给变量

  sort file.txt: 对file.txt文档中的行进行排序

  uniq: 删除文本文档中出现的行列比如: sort file.txt | uniq

  expr: 进行数学运算Example: add 2 and 3expr 2 " " 3

  find: 搜索文档比如:根据文档名搜索find . -name filename -print

  tee: 将数据输出到标准输出设备(屏幕) 和文档比如:somecommand | tee outfile

  basename file: 返回不包含路径的文档名比如: basename /bin/tux将返回 tux

  dirname file: 返回文档所在路径比如:dirname /bin/tux将返回 /bin

  head file: 打印文本文档开头几行

  tail file : 打印文本文档末尾几行

   sed: Sed是个基本的查找替换程式。能够从标准输入(比如命令管道)读入文本,并将结果输出到标准输出(屏幕)。该命令采用正则表达式(见参考)进行搜索。 不要和shell中的通配符相混淆。比如:将linuxfocus 替换为 LinuxFocus :cat text.file | sed 's/linuxfocus/LinuxFocus/' > newtext.file

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!