- 浏览: 90161 次
- 性别:
- 来自: 杭州
文章分类
最新评论
http://www.cnblogs.com/ghj1976/archive/2010/07/12/1775860.html
第一次学shell编程,看的文章中说shell程序必须以"#!/bin/sh"开始,也就认为是这样了。
虽然知道在shell中以"#"开始的语句都是注释,但也从没认为"#!/bin/sh"也是注释,就像对C语言程序必须有main函数一样毫无怀疑。
但前些时候又听说"#!/bin/sh"也是注释,可有可无,当时觉得真是一个失败,连基本的语法都分不清。
前几天借了一本书,才真正认识了"#!/bin/sh"。
shell编程是以"#"为注释,但对"#!/bin/sh"却不是。
"#!/bin/sh"是对shell的声明,说明你所用的是那种类型的shell及其路径所在。
如果没有声明,则脚本将在默认的shell中执行,默认shell是由用户所在的系统定义为执行shell脚本的shell。
比如:如果脚本被编写为在Korn Linux中运行,而默认运行shell脚本的为C shell csh,则上述脚本在执行过程中很可能失败。
所以建议大家就把"#!/bin/sh"当成C 语言的main函数一样,写shell必须有,以使shell程序更严密。
即: #!/bin/sh 是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面根的是此解释此脚本的shell的路径。
其实第一句的#!是对脚本的解释器程序路径,脚本的内容是由解释器解释的,我们可以用各种各样的解释器来写对应的脚本。
比如说/bin/csh脚本,/bin/perl脚本,/bin/awk脚本,/bin/sed脚本,甚至/bin/echo等等。
那我们真的能写一个/bin/echo的脚本文件吗?我们来试试,下面是一个例子:
代码:
#!/bin/echo –e
这只有一行的程序(实际上它也只能是一行,echo程序并不是被设计成像awk那样的编程语言,能写成源程序文件)命名为myecho,加上权限后执行它:
代码:
$ ./myecho "hi\a" ./myecho hi
如果你的echo支持-e选项并且你工作的环境还算安静,你在得到上面的结果的时候也应该听到清脆的终端响铃。但这种程序是毫无作用的。
参考资料:
终于明白#!bin/sh是什么意思了
http://blog.sina.com.cn/s/blog_4d32d0b40100fngc.html
发表评论
-
shell运算符
2014-07-30 14:25 555<div class="iteye-blog ... -
tar备忘
2013-08-09 20:49 635http://www.cnblogs.com/qq78292 ... -
shell变量替换
2013-02-05 20:32 717MARK //TODO http://ww ... -
shell的条件判断语句写法
2013-02-05 20:26 711参考http://longzxr.blog.sohu.com ... -
shell元字符 metadata
2013-02-05 20:09 724MARK //TODO http://blog.csd ... -
shell中的括号 () (()) [] [[]] {}
2013-02-05 20:01 1041MARK //TODO 待验证 http://www. ... -
shell字符串操作(替换,截取)
2013-02-05 15:11 867A='abc.sina.txt'; echo ${A ... -
awk分隔符
2013-02-04 20:12 1388分隔符,可以用正则来表示 echo 'a-b.c' | a ... -
xargs用法
2012-10-30 19:52 1021path=/home/xx/data/xx ls pa ... -
FORK BOMB
2012-06-28 14:22 1086http://blog.csdn.net/ninthing/a ... -
source/exec/fork
2012-06-07 16:07 726http://blog.csdn.net/zhuy ... -
SHELL 命令行解释执行
2012-06-06 11:46 880//TODO 参考 Unix S ... -
SHELL数组
2012-04-17 10:19 697http://bbs.chinaunix.net/thread ... -
time() 测试shell脚本/cmd的性能
2012-03-20 00:15 821time($cmd) -
shell 逻辑表达式 运算符
2012-03-20 00:02 825转自 http://www.cnblogs.com/cheng ... -
shell字符串处理
2012-02-29 01:19 7981.待实践 http://www.blogjava.net/ ... -
authorized_keys 文件的权限
2012-02-17 11:26 1821必须是 600,700 ??? (其组,其他人 必须是0,0) ... -
linux 查看CPU等硬件信息
2012-02-12 22:08 992http://www.oschina.net/question ... -
Linux中的控制字符
2011-11-19 16:18 807Ctr F :forward 光标向前 Ctr b :bac ... -
awk代码中执行shell
2011-11-18 21:12 2133思路: 在awk的print语句中拼出命令,管道输出到she ...
相关推荐
#!-bin bash#俄罗斯方块游戏#10.21.2003 xhchen[[电子邮件]xhchen@winbond.c
binbash" 暗示着一个脚本文件,它可能是用于Linux或Unix环境的shell脚本。在这个标题中,可以看到两个不同的shebang(#!)行,一个是`#!/usr/local/bin/dcsh`,另一个是`#!/bin/bash`。Shebang是用来指定脚本应该由...
_bin_bash”的作用详解 #### 一、引言 在Shell脚本编程中,我们经常会看到脚本的第一行是`#!/bin/bash`或`#!/bin/ksh`这样的语句。对于初学者来说,这行代码可能会显得有些神秘,但实际上它具有非常重要的意义。...
在Linux系统中,当尝试运行一个Shell脚本(如`t.sh`)并遇到错误“bash: ./t.sh: /bin/bash^M: 损坏的解释器: 没有那个文件或目录”时,这通常意味着脚本的开头行(也称为Shebang行)受到了不兼容的文本编辑器的影响...
用于漏扫出的系统安全加固,适用于CentOS7,脚本自动升级为openssh9.4p1,升级完版本OpenSSH_9.4p1, OpenSSL 3.0.11 19 Sep 2023 编译时间:20230927
/bin/bash mkdir .temp_for_certificate cd .temp_for_certificate count=0 while [ -n “$1” ] do count=$[$count+1] echo “(#$count) “`basename “$1″`”:” echo “” path=`jar tf “$1” | grep RSA` #...