Shell命令 下载本文

第 4 章 Shell 与 Vi 编辑器

Linux 系统的一个最大的优势就是按照这种方式将一些简单的命令连接起来,形成更

复杂的、功能更强的命令。那些标准的服务程序仅仅是一些管道应用的单元模块,在管道 中它们的作用更加明显。

4.1.5 Shell 脚本

Shell 最强大的功能在于它是一个功能强大的编程语言。用户可以在文件中存放一系列 的命令,这被称为 Shell 脚本或 Shell 程序,将命令、变量和流程控制有机地结合起来将会 得到一个功能强大的编程工具。Shell 脚本语言非常擅长处理文本类型的数据,由于 Linux 系统中的所有配置文件都是纯文本的,所以 Shell 脚本语言在管理 Linux 系统中发挥了巨大 作用。

1. 脚本的内容

Shell 脚本是以行为单位的,在执行脚本的时候会分解成一行一行依次执行。脚本中所 包含的成分主要有注释、命令、Shell 变量和结构控制语句。其中:

1)注释。用于对脚本进行解释和说明,在注释行的前面要加上符号“#”,这样在执行 脚本的时候 Shell 就不会对该行进行解释。

2)命令。在 Shell 脚本中可以出现任何在交互方式下可以使用的命令。 3)变量。Shell 支持具有字符串值的变量。Shell 变量不需要专门的说明语句,通过赋 值语句完成变量说明并予以赋值。在命令行或 Shell 脚本文件中使用$name 的形式引用变量 name 的值。

4)流程控制。主要为一些用于流程控制的内部命令。 表 4-8 列出了 Shell 用于流程控制的内置命令

表 4-8 Shell 中用于流程控制的内置命令

命令 text expr 或[expr] if expr then command-table fi if expr then command-table else command-talbe fi case ? case for ?do?done while?do?done until?do?done break continue

说明 用于测试一个表达式 expr 如真假 用于实现单分支结构 用于实现双分支结构 用于实现多分支结构 用于实现 for 型循环 用于实现当型循环 用于实现直到型循环 用于跳出循环结构 用于重新开始下一轮循环 2. 脚本的建立与执行

用户可以使用任何文本编辑器编辑 Shell 脚本文件,如 Vi、gedit 等。 Shell 对 Shell 脚本文件的调用可以采用 3 种方式:

- 85 -

第 4 章 Shell 与 Vi 编辑器

1)一种是将文件名作为 Shell 命令的参数,其调用格式为:

$ Bash script_file

当要被执行脚本文件没有可执行权限时只能使用这种调用方式。

2)另一种调用方法是先将脚本文件的访问权限改为可执行,以便该文件可以作为执行

文件调用。具体方法是:

$ chmod +x script_file

$ PATH=$PATH:$PWD

$ script_file

3)当执行一个脚本文件时,Shell 就产生一个子 Shell(即一个子进程)去执行文件中 的命令。因此,脚本文件中的变量值不能传递到当前 Shell(即父进程)。为了使的脚本文 件中的变量值传递到当前 Shell,必须在命令文件名前面加“.”命令。即:

$ ./script_file “.”命令的功能是在当前 Shell 中执行脚本文件中的命令,而不是产生一个子 Shell 执行命令文件中的命令 。下面给出一个执行 Shell 脚本的例子。 执行 Shell 脚本举例 编写脚本 myfile

$ cat >myfile mydir=?pwd? export mydir ^d //显示脚本 myfile 的内容

$ cat myfile mydir=?pwd? export mydir

//为脚本添加执行权限并执行 $ chmod +x myfile $ ./myfile //显示变量 mydir 的值

$ echo $mydir //由于这种脚本的方式是在子 Shell 中执行 //所以当脚本执行结束返回主 Shell 后,变量已没有值 //用.命令执行脚本

$ ./myfile //显示变量 mydir 的值

- 86 -

第 4 章 Shell 与 Vi 编辑器

$ echo $mydir /home/johe

//由于这种执行脚本的方式是在当前 Shell 中执行,

//当脚本执行结束变量依然有值

4.2 Vi 编辑器

Vi 是 Visual interface 的简称,它可以执行输出、删除、查找、替换、块操作等众多文 本

操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的。Vi 不 是一个排版程序,它不像 WORD 或 WPS 那样可以对字体、格式、段落等其他属性进行编 排,它只是一个文本编辑程序。Vi 是全屏幕文本编辑器,它没有菜单,只有命令。

4.2.1 Vi 的启动与退出

在系统提示符后输入 Vi 和想要编辑(或建立)的文件名,便可进入 Vi,如:

$ vi myfile $ vi

如果只输入 Vi,而不带文件名,也可以进入 Vi。如图 4-3 所示。

- 87 -

第 4 章 Shell 与 Vi 编辑器

图 4-3 Vi 编辑环境

- 88 -

第 4 章 Shell 与 Vi 编辑器

在命令模式下键入:q,:q!,:wq 或:x(注意:号),就会退出 Vi。其中:wq 和:x 是存盘退

出,而:q 是直接退出。如果文件已有新的变化,Vi 会提示你保存文件而:q 命令也会失效, 这时你可以用:w 命令保存文件后再用:q 退出,或用:wq 或:x 命令退出,如果你不想保存改 变后的文件,你就需要用:q!命令,这个命令将不保存文件而直接退出 Vi,例如:

:w

:w filename :wq!

:wq! filename :q!

保存; 另存为 filename 保存退出 注:以 filename 为文件名保存后退出 不保存退出

应该是保存并退出 ,功能和:wq!相同

:x

4.2.2 Vi 的工作模式

Vi 有 3 种基本工作模式:编辑模式、插入模式和命令模式。考虑到各种用户的需要采 用状态切换的方法实现工作模式的转换,切换只是习惯性的问题,一旦你熟练的使用上了 Vi 你就会觉得它其实也很好用。

进入 Vi 之后,首先进入的就是编辑模式,进入编辑模式后 Vi 等待编辑命令输入而不 是文本输入,也就是说这时输入的字母都将作为编辑命令来解释。

进入编辑模式后光标停在屏幕第一行首位,用_表示,余各行的行首均有一个“~”符号, 表示该行为空行。最后一行是状态行,显示出当前正在编辑的文件名及其状态。如果是[New File],则表示该文件是一个新建的文件;如果输入 Vi 带文件名后,文件已在系统中存在, 则在屏幕上显示出该文件的内容,并且光标停在第一行的首位,在状态行显示出该文件的 文件名、行数和字符数。

在编辑模式下输入插入命令 i、附加命令 a、打开命令 o、修改命令 c、取代命令 r 或替 换命令 s 都可以进入插入模式。在插入模式下,用户输入的任何字符都被 Vi 当作文件内容 保存起来,并将其显示在屏幕上。在文本输入过程中(插入模式下),若想回到命令模式下, 按 ESC 键即可。

在编辑模式下,用户按“:”键即可进入命令模式,此时 Vi 会在显示窗口的最后一行(通 常也是屏幕的最后一行)显示一个“:”作为命令模式的提示符,等待用户输入命令。多数文 件管理命令都是在此模式下执行的。末行命令执行完后,Vi 自动回到编辑模式。

若在命令模式下输入命令过程中改变了主意,可用退格健将输入的命令全部删除之后, 再按一下退格键,即可使 Vi 回到编辑模式。

4.2.3 Vi 命令

在编辑模式下,输入如表 4-9 所示的命令均可进入插入模式。

- 89 -