----正在学习shell,途中做些笔记,整理整理,方便以后翻阅。----
----RHEL_6.2_x64,GNU bash version 4.1.2(1)-release---- 

几乎每个shell脚本都是以#!开头,接下来就讲讲关于#!的一些东西。
    1)编写好的脚本需要一个解释器,这就需要在脚本的开始利用#!指定你需要用到的解释器。当然你也可以不指定,不过这样的话,你的脚本就是一堆命令的集合。如果你的默认shell不是Bash,那许多Bash非常好的特性则不会起作用,更严重的是许多命令甚至变量都无法使用,比如Bash的内建命令:echo、read等等。如果不能使用变量的话,当然这也就失去了脚本编程的意义了。

    2)#!是指定文件类型的特殊标记,在这种情况下也就是指这是一个脚本文件。在#!之后接着是一个路径名,这个路径名就是解释脚本中命令的解释程序所在的路径,可能是一个shell, 也可能是一个程序语言, 也可能是一个工具包中的命令程序。这个解释程序从头开始解释并且执行脚本中的命令(从sha-bang行下边的一行开始),忽略注释。

    3)指定解释器种类
    #!/bin/sh
    #!/bin/bash
    #!/usr/bin/perl
    #!/usr/bin/tcl
    #!/bin/sed -f
    #!/usr/awk -f
    上面的每一个脚本的开头行都是一种解释器,如果是/bin/sh, 那么就是默认shell (在Linux系统上默认就是 bash), 否则的话就是其他解释器,如果你只使用默认的解释器的话,这行也可以不写。使用 #!/bin/sh, 因为大多数的商业UNIX系统上都是以Bourne shell作为默认shell,这样可以使脚本移植到non-Linux的机器上,虽然这将会牺牲Bash一些独特的特征,但是脚本将与POSIX 的sh标准相一致。

    4)#!后面紧跟解释器的路径。给出的路径名必须是正确的, 否则将会出现一个错误消息 -- 通常是"Command not found" -- 这将是你运行这个脚本时所得到的唯一结果。空白行也被认为是一行,所以不要让你的脚本以空白行开始。

    5)因为这行是以#作为行的开头,当命令解释器执行这个脚本的时候,会把它作为一个注释行。 当然,在这之前, 这行语句已经完成了它的任务,就是调用命令解释器,如果脚本中还包含有其他的#!行, 那么bash将会把它看成是一个一般的注释行。

注意:
    1)那些具有UNIX味道的脚本(基于4.2BSD)需要一个4字节的魔法数字,在#!后边需要一个空格 -- #! /bin/sh. 
    2) 你还可以试试在一个README 文件的开头加上一个#!/bin/more ,并让它具有执行权限。结果将是文档自动列出自己的内容。 (一个使用cat命令的 here document在这里可能是一个更好的选择。