首页 windows软件 手机软件 驱动下载 电脑教程 专题合集
当前位置: 首页 > 电脑教程 > Linux教程 > Linux管理员shell自动化操作|bash Shell解释器的高效应用教程

Linux管理员shell自动化操作|bash Shell解释器的高效应用教程

时间:2012-04-30 00:23:34

小编:动力软件园

阅读:

如何让您的Linux管理更加轻松,如何高效使用红帽企业版Linux的关键是自动化。
当要做乏味的、重复性的劳动时,好的Linux管理员实际上应该是懒得去做这些事的。
就像前面说到的,他们用一些方法把命令连接在一起同时运行,而不是等着一个命令运行
完再键入另一个命令。他们还利用了bash历史记录的特征,并且说明了如何引用以前键入的
命令以便高效地完成任务。然而,你的系统管理员工具箱里仍然少了一件重要的东西:脚本。脚本最简单的形式只
是一个含有命令列表的文本文件。命令通过指定的程序发送,这个程序被称为解释器,它依
次运行每个命令。通常,这个解释器就是bash Shell(被称做/bin/bash或/bin/sh ),每个命
令都是一个普通的Linux命令。其他解释器允许你使用更强大的编程语言,如Perl , Python
和Ruby.
    在你开始编写脚本时,要记住几个重要的事项:
    .脚本的第一行必须指定向哪个解释器发送指令,可以用一个名叫“shebang"(读作
      "shuh-bang")的特殊字符串来完成,这个字符串是#:。shebang之后是该脚本解释器
      的名称。例如,要把bash作为你的解释器,你可以用#!/bin/sh或者#!/bin/bash,大多
      数脚本只用##!/bin/sh。把解释器称为##!/bin/bash可以有一些额外的特性,但却限制了
      脚本与旧版UNIX系统的兼容性,因而很少有必要这么做。
    .在运行脚本前,你必须赋予它“可执行的”权限(否则,它不过是个文本文件)。用
      来赋予权限的命令是chmod u+x <scriptname>,它允许你(只有你)运行该脚本,就
像运行其他任何命令一样。chmod命令将在以尼剪套章节中详细讨论。
如果你在主目录里创建了一个名叫foo.sh的脚本,接着只要键入foo.sh命令,’就会得
到一个“no such file or directory(无此文件或目录)”的错误提示。这是因为当你键
入命令时,Linux系统从一组固定的目录中寻找这个命令。这些目录也被看做是你的
PATH,而且为了安全起见,你的PATH绝不会包括当前目录。为了解决这个问题,
你有两种选择:
(1)你可以键入-/foo.sh或Jfoo.sh(“.”指的是当甜臀〕录)来明确指定脚本的位置。
      (2)你可以把脚本放在你的PATH定义目录里。只有根用户才有权限把文件放在大多
          数这样的目录里,但是所有用户的主目录里都有个人的bin,可以向其中写入信
          息。因此,如果foo.sh被移动到一/bin,只要在命令行中键入foo.sh就可以运行
          它了,这是首选的技巧。
    你将在后面的章节中学到更多关于PATH设置的技巧。
    让我们看一个简单的例子。假如你是一个管理员,经常需要查看哪些用户在登录系统,
你可以通过运行w命令来得到这个信息(这样就可以了)。虽然这样做能够提供一份很好的
登录系统的用户清单,但却无法显示执行w命令的时间。另外一个date命令能够显示当前
日期和时间,却不能显示用户信息。如果能把这两个命令结合起来该有多好……
    假定你在个人的bin目录下创建了一个名叫wdate.sh的脚本。
    注意,在它可以像普通命令那样运行之前,要把这个肚孙淤浪在,/bin里,并使它可以执
行。执行时,它先运行date命令,接着运行w命令,执行一个命令就可以取得执行两个命
令的效果!显然,可以修改这个脚本来运行其他任意的命令。实际上,脚本比单纯的命令列
表强大得多,而且本身就是复杂的程序。我们将在第11章的补充材料中讨论这些高级的脚本
技巧,现在先集中掌握基本脚本,这是一个非常有用的省力技巧。管理员的经验法则是:用
脚本完成要重复执行两次以上的任务!
    返回值
    Linux系统中的每个进程都有寿命。所有进程应另一个进程(通常是Shell)的请求而启
动,发出请求的进程被称做父进程,新启动的进程被称做子进程。通常,子进程完成自身的
任务后退出。(子进程可能再产生子进程)子进程退出后会返回一点信息给父进程,叫做返
回值或退出状态。父进程负责收集子进程的返回值。
    返回值以整数的形式出现,范围在0到255之间。程序可以在退出时随意选择要返回的
值。不同返回值所表示的含义常常是定义完好的程序接口的组成部分,在该程序的man page
中记载。(如果你熟悉diff命令,在它的man page的“DIAGNOSTICS”部分里有范例。)
整个Linux界(和整个UNIX界)的约定是,程序返回0意味着无论它要完成什么都是“成
功”的,而返回值是0以外的数值则意味着某种形式的失败。
 

 

 

火爆手游