环境

shell编程跟java、php编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。

OS

当前主流的操作系统都支持shell编程,本文档所述的shell编程是指Linux下的shell,讲的基本都是POSIX标准下的功能,所以,也适用于Unix及BSD(如Mac OS)。

Linux

Linux默认安装就带了shell解释器。

Mac OS

Mac OS不仅带了sh、bash这两个最基础的解释器,还内置了ksh、csh、zsh等不常用的解释器。

Windows上的模拟器

windows出厂时没有内置shell解释器,需要自行安装,为了同时能用grep, awk, curl等工具,最好装一个cygwin或者mingw来模拟linux环境。

脚本解释器

sh

即Bourne shell,POSIX(Portable Operating System Interface)标准的shell解释器,它的二进制文件路径通常是/bin/sh,由Bell Labs开发。

本文讲的是sh,如果你使用其它语言用作shell编程,请自行参考相应语言的文档。

bash

Bash是Bourne shell的替代品,属GNU Project,二进制文件路径通常是/bin/bash。业界通常混用bash、sh、和shell,比如你会经常在招聘运维工程师的文案中见到:熟悉Linux Bash编程,精通Shell编程。

在CentOS里,/bin/sh是一个指向/bin/bash的符号链接:

  1. [root@centosraw ~]# ls -l /bin/*sh
  2. -rwxr-xr-x. 1 root root 903272 Feb 22 05:09 /bin/bash
  3. -rwxr-xr-x. 1 root root 106216 Oct 17 2012 /bin/dash
  4. lrwxrwxrwx. 1 root root 4 Mar 22 10:22 /bin/sh -> bash

但在Mac OS上不是,/bin/sh和/bin/bash是两个不同的文件,尽管它们的大小只相差100字节左右:

  1. iMac:~ wuxiao$ ls -l /bin/*sh
  2. -r-xr-xr-x 1 root wheel 1371648 6 Nov 16:52 /bin/bash
  3. -rwxr-xr-x 2 root wheel 772992 6 Nov 16:52 /bin/csh
  4. -r-xr-xr-x 1 root wheel 2180736 6 Nov 16:52 /bin/ksh
  5. -r-xr-xr-x 1 root wheel 1371712 6 Nov 16:52 /bin/sh
  6. -rwxr-xr-x 2 root wheel 772992 6 Nov 16:52 /bin/tcsh
  7. -rwxr-xr-x 1 root wheel 1103984 6 Nov 16:52 /bin/zsh

高级编程语言

理论上讲,只要一门语言提供了解释器(而不仅是编译器),这门语言就可以胜任脚本编程,常见的解释型语言都是可以用作脚本编程的,如:Perl、Tcl、Python、PHP、Ruby。Perl是最老牌的脚本编程语言了,Python这些年也成了一些linux发行版的预置解释器。

编译型语言,只要有解释器,也可以用作脚本编程,如C shell是内置的(/bin/csh),Java有第三方解释器Jshell,Ada有收费的解释器AdaScript。

如下是一个PHP Shell Script示例(假设文件名叫test.php):

  1. #!/usr/bin/php
  2. <?php
  3. for ($i=0; $i < 10; $i++)
  4. echo $i . "\n";

执行:

  1. /usr/bin/php test.php

或者:

  1. chmod +x test.php
  2. ./test.php