当我们需要计算机帮我们做点什么的是,最好是选对工具,就像你不会用文本编辑器来做支票簿的核对,不会用计算器来写策划方案一样,所以说程序语言用于不同的需求,本身没有好坏之分。
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 脚本的典型开发周期,首先,直接在命令行上测试。然后,一旦找到能够完成工作的适当语法,再将他们放进一个单独的脚本里,并未该脚本设置执行的权限。之后就能直接使用该脚本了。