Chinaunix

标题: 脚本中#!/bin/sh能否不写? [打印本页]

作者: xyyou    时间: 2005-03-24 13:24
标题: 脚本中#!/bin/sh能否不写?
本人初学linux不久,发现在编写脚本的时候开头都有一行#!/bin/sh
我记得#是表示注释的,那么这一行应该是可以不写的吧?为什么又说“这条语句告诉操作系统用来解释脚本的程序位置。”呢?
还有,“!”表示的是什么意思,比如[ ! -w "$name ]中的“!”是什么意思?
希望各位大哥大姐不吝赐教,感激不尽
作者: 双眼皮的猪    时间: 2005-03-24 13:43
标题: 脚本中#!/bin/sh能否不写?
!表示非.

#!/bin/sh
表示本脚本由/bin/路径的sh程序来解释....
跟命令行下~
#/bin/sh Scriptname效果相同...
作者: platinum    时间: 2005-03-24 13:53
标题: 脚本中#!/bin/sh能否不写?
是的,如果活学活用,你还可以这样执行一个php的文件

  1. #! /usr/local/php/bin/php
  2. <?phpinfo();?>;
复制代码


依此类推,perl的也是一样
作者: xyyou    时间: 2005-03-24 13:53
标题: 脚本中#!/bin/sh能否不写?
但是#不是用来表示注释的吗?难道这里的#不是这个意思?
作者: platinum    时间: 2005-03-24 13:56
标题: 脚本中#!/bin/sh能否不写?
[quote]原帖由 "xyyou"]但是#不是用来表示注释的吗?难道这里的#不是这个意思?[/quote 发表:

不同的地方,#有不同的意思
就好比c++里面用“//”来注解
vb里面用“'”注解一样
dns里面用“;”来注解

shell的开头那个#不是用来注解的
作者: 双眼皮的猪    时间: 2005-03-24 13:56
标题: 脚本中#!/bin/sh能否不写?
如果你要用给该脚本执行权限的话...第一行必须声明该脚本由什么来解释...
#的确表示注释.第一行的你只需要知道是声明解释程序的路径就好了 :)

假如第一行是别的东西.而你又给了x权限,执行的时候就会出错...
作者: xyyou    时间: 2005-03-24 14:02
标题: 脚本中#!/bin/sh能否不写?
哦~~太感谢了
作者: 双眼皮的猪    时间: 2005-03-24 14:09
标题: 脚本中#!/bin/sh能否不写?
说了半天忘记回答你的问题..
可以不写.执行时手工执行...
/bin/sh xxxx.sh
效果是一样的 ...
但是跟
source xxxx.sh和
. xxxx.sh
还有区别.
一起进步吧...
作者: cgweb    时间: 2005-03-24 14:13
标题: 脚本中#!/bin/sh能否不写?
如果不写也成,那就用你登陆的那个shell来解释执行.
作者: tinywind    时间: 2005-03-24 14:17
标题: 脚本中#!/bin/sh能否不写?
可以不写,但应该有良好的编程习惯
作者: woshiwho    时间: 2005-03-24 14:45
标题: 脚本中#!/bin/sh能否不写?
#通常用作注释,但是#!放在一起就标志着这是一个shell script,其后的路径指出了用来解释这个script的程序。
如果一个script只是一些普通linux指令的堆砌。那么#!可以略去不写。但通常我们遇到的都不是这种情况。
如果这个script中包含一些自定义的程序组件,比如说函数,变量等,#!便需要标注。
应该是这样,嗯。
作者: xyyou    时间: 2005-03-24 15:17
标题: 脚本中#!/bin/sh能否不写?
哦~~再次谢谢各位的热心帮助了
作者: Stevenxin    时间: 2005-09-07 14:58
标题: 脚本中#!/bin/sh能否不写?
不过,在我的系统上(SunOS5. 上,如果开头#! /bin/.....那一行整个都不写的话,不是用登陆shell(我的是tcsh)来执行的,而是用B shell来执行的。
如果那一行只留下#!的话,则是用登陆shell来执行的。
不知道是不是在linux 下和 UNIX下行为不同呢?
记得steves的那本书上说:“在系统碰到一个可执行文件时,是首先把它当作二进制机器指令文件来执行的,如不是(比如是shell脚本),那么它就尝试会用B shell来执行。”
这句话的前提是在登陆shell是b shell的情况下说的呢?还是不管登陆shell是那个,系统都是先尝试用B SHELL来执行?不管哪种理解,如何解释上面的现象呢?
还请各位指点。
作者: sakulagi    时间: 2005-09-07 16:01
标题: 脚本中#!/bin/sh能否不写?
这个可能是不同的系统的shell的行为不同。solaris 2.5可能默认是没有指明用什么shell执行的脚本都是bshell的脚本,所以就用b shell就去执行了。我也是猜的,手头没有sun的机器
作者: ltw886    时间: 2005-09-07 16:53
标题: 脚本中#!/bin/sh能否不写?
不写也行,,直接将脚本文件CP到/bin下也可执行
作者: Stevenxin    时间: 2005-09-08 12:48
标题: 脚本中#!/bin/sh能否不写?
to sakulagi :
你说的倒有可能,改天我再在RedHat9上试一下。
不过如果我第一行只写“#!”,这下也没有指明用什么shell去执行,但它就不是用B shell来执行了,而是用我的登陆shell(tcsh)来执行了。这倒是有点奇怪。(还是在SunOS5. 8)的机器上。
作者: ljldx    时间: 2012-08-22 11:05
解惑贴!感谢!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2