红联Linux门户
Linux帮助

关于脚本文件命名的问题

发布时间:2011-05-26 14:50:45来源:红联作者:变换之风1986
发现很多shell脚本文件命名都是以.sh结尾的 请问以.sh作为脚本文件名后缀是必须的吗? 还是说便于分辨出哪些是脚本文件而约定俗称的一个规定 可以在脚本文件命名不加任何后缀吗?
文章评论

共有 6 条评论

  1. wudalang1981 于 2011-05-27 15:27:11发表:

    先顶了再说,感谢楼主哦,太感谢了

  2. deepwhite 于 2011-05-27 10:56:02发表:

    科普一下 ---- Linux 脚本文件

    首先要肯定的是,脚本文件不需要指定拓展名。

    那么,如果不指定拓展名,那么 OS 是怎么判断该脚本应该用什么解释器来解释执行呢? bash? python? 还是 perl ?

    编写过这类脚本的人都知道,Linux 下面的脚本文件,开头第一行都会写成下面的形式:[code]
    #!/bin/bash
    [/code]或者[code] #!/usr/bin/env python [/code]这里的 #! 实际上是一个特殊的标记,用于告诉系统改用什么解释器来执行脚本。

    对于 Linux 来讲,脚本一般通过一个终端来执行,该终端在执行脚本的时候,将会通过内核提供的相关系统调用(如 exec等)来用待执行的脚本来替换当前进程的映像。而内核在执行 exec 的时候,会首先打开该脚本,并读取脚本中的以 #! 开头的行,然后再经过一系列的判断之后,决定该使用哪个解释器来解释和执行脚本。

    例如下面的简单脚本的内容和执行情况:[code]~/tmp $ cat test
    #!/bin/bash
    #

    echo "AAAAAAA"

    ~/tmp $ chmod 751 test
    ~/tmp $ ./test
    AAAAAAA
    [/code]而如果我们把 /bin/bash 换成一个别的、不存在的解释器,就会发现:[code]~/tmp $ cat test
    #!/bin/basha
    #

    echo "AAAAAAA"

    ~/tmp $ ./test
    /bin/basha: command not found[/code]感兴趣的话,你也可以将 /bin/bash 换成一些确实存在、但不能用来解释该脚本的程序,比如 ls, find 之类的,看看会有什么现象发生。

  3. yanyongkg 于 2011-05-26 20:54:28发表:

    伸手党很多

  4. hantu 于 2011-05-26 19:23:53发表:

    .sh不是必须的,不用后缀名也一样用,加后缀是为了方便自己和别人较快地识别文件类型

  5. 相思爱文 于 2011-05-26 18:28:30发表:

    楼主随便写一个脚本文件,然后不以.sh为结尾命名,然后执行一下试试吧。

  6. yongyun521 于 2011-05-26 14:57:24发表:

    新手不太清楚。