返回首页 两个月精通 Shell 脚本

shell 学习第一天

在开始学习 shell 以前我觉得应该具备的基础有以下几点:

  1. 如何登陆 linux 系统
  2. 如何在命令行上执行程序
  3. 如何做一个简单的命令管道,与使用简单的输入 / 出重定向,例如 < 和 >
  4. 如何以 & 将程序放在后台执行
  5. 使用 chmod,将脚本设置为可执行权限

入门

当我们需要计算机帮我们做点什么的是,最好是选对工具。就像你不会用文本编辑器来做支票簿的核对, 不会用计算器来写策划方案一样,所以说程序语言用于不同的需求,本身没有好坏之分。

shell 脚本常用于系统管理工作,或者用于结合现有的程序以完成特定的工作。一旦你写出了一个完成工作的办法,就可以吧用到的命令串在一起, 放进一个单独的程序或者脚本里,以后只要执行改程序就能完成工作。如果写的程序很有用,那么别人可以一用该程序当做一个黑盒来使用,他是一个可以完成工作的成虚,但是我们不必知道他是如何完成的 (面向对象的封装特性)。

首先来看看脚本语言和编译语言的差异

大型的程序一般都是由编译语言写成,例如:C++,Java,C 等。这些程序只要从源代码 (socure code) 转换为目标代码 (object code),便能直接通过计算机来执行。

变异性语言的有点事: 效率高,因为他们多半是运作与底层,所处理的是子节,整数,浮点数或者其他的及其层级的对象。例如: 在 C++ 里,很难首先目录的整体移动或者复制。

而脚本编程语言通常是解释型的。这类程序的执行,是由解释器度日程序代码,并将其转换成内部的形式,再执行。注意,解释器本身是一般的编译型程序。

通俗一点: 编译语言需要编译器,脚本语言需要解释器,例如编写 C++ 程序需要使用 VS,而编写 HTML 代码有网页就行,因为网页中有自带的解释器。

为什么要使用 shell 脚本

使用脚本编程语言的好处是,脚本语言多半运行在比编译语言还高得层级,能够情已处理文件与目录之类的对象。缺点: 一般情况下,效率比较低。不过权衡之下,脚本的执行速度已经很快,快到足以让人感觉不到性能不高了。常用的脚本编程语言有:shelll,Ruby,javascript等。 shell 似乎是不同版本的 linux 系统之间的通用功能。shell 脚本只要用心写,就能应用到很多系统上。

shell 脚本的过人之处

  • 简单性: shell 是高级语言
  • 可移植性: 通过 POSIX (可移植操作系统接口,是 IEEE 为要在各种 UNIX 操作系统上运行的软件,而定义 API 的一系列互相关联的标准的总称) 所定义的功能,可以在不同的系统上执行,无需需改。
  • 开发容易: 短时间即可完成一个功能强大又好用的脚本 (字啊以后的学习中就能看到)

说了那么多,接下来就是一个简单的脚本。在 shell 交互界面输入 who,得到以下信息 (这是我的电脑):

root   pts/0        2015-06-07 18:37 (192.168.199.114)

这行信息代表系统上有多少人登陆。类似于 QQ 在线人数

每个字段的含义分别是登入帐号 (root),使用的终端机 (pts/0),登入时间以及从何处登入。在大型的,多用户的系统上 (服务器的运维上),所列出的列表可能很长 (一个页面不够显示),你需要的信息或许可能滚出画面,这是让用户查询的困难。而这正是进行自动化的好时机。使用 wc(字数计算) 程序,特可以计算出行数 (line),字符数 (character),字数 (word)。使用 wc -l: 只列出行数。

who | wc -l 计算用户个数 -----> 我的电脑是一个 1

|(管道) 符号可以在两个程序之间建立管道 (pipeline):who 的输出,成了 wc 的输入。
将此管道转成一个独立的命令。方法是把这条命令输入一个一般的文件中,然后使用 chmod 为该文件设置执行的权限。

#cat > nusers cat 是输出文件内容的命令,>nusers 表示把内容送到文件 nusers 里而不是默认的屏幕。但是这里 cat 后面没有参数,意味着 cat 将从键盘读取数据输入到 nusers 中,以 CTRL+D 结束。

  • ^D Ctrl+D 表示 end-of-file
  • #chmod +x nusers 让文件拥有执行的权限
  • #./nusers 输出我们需要的结果。

易尚展示了一个小型 Shell 脚本的典型开发周期,首先,直接在命令行上测试。然后,一旦找到能够完成工作的适当语法,再将他们放进一个单独的脚本里,并未该脚本设置执行的权限。之后就能直接使用该脚本了。

上一篇: 关于 下一篇: shell 学习第二天