首页 > 其他分享 >收集整理的对#!bin/sh的认识

收集整理的对#!bin/sh的认识

时间:2023-06-21 22:38:03浏览次数:42  
标签:bin 脚本 shell 收集整理 程序 echo sh

第一次学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

标签:bin,脚本,shell,收集整理,程序,echo,sh
From: https://blog.51cto.com/u_15588078/6532177

相关文章

  • ecshop中$user对象
    有时候我们是需要把ecshop跟我们现有的项目整合,比如典型的会员系统是我们自己的,网店是ECshop的。或者,我们需要在ucenter的用户跟ECSHOP的做关联。ECShop已经替我们很好的规划了这部分。ecshop的程序中,有个对象:$user,它就是用来处理用户信息的。比如登陆,注册,还有就是用来和第三方......
  • 在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory。
    在Linux中执行.sh脚本,异常/bin/sh^M:badinterpreter:Nosuchfileordirectory。 分析:这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。解决:1)在windows下转换: 利用一些编辑器如UltraEdit或EditPlus等工具先......
  • Chrome Flash插件的手动安装方法
    我的操作系统是Win2008,跟网上的解决方案稍稍有点不同,下面就是安装步骤:从Adobe官方下载Flash插件,下载地址:http://fpdownload.macromedia.com/get/flashplayer/xpi/current/flashplayer-win.xpi。并将下载后的文件后缀改为ZIP,然后将其解压出来。从解压出来的文件中,复制“flash......
  • 利用Edge和NewBing快速阅读长篇英文文献
    Edge的最新版本集成了NewBing的搜索聊天功能,可以很方便的基于某个网页或内容进行聊天,如下图所示:要讨论的内容是本地的文件也可以:使用注意点:Edge请用Dev的最新版本。需要FQ,国内的bing不支持newbing(https://www.bing.com/new);快速阅读一篇论文的通用问题当快速阅读一篇论文时,可以......
  • shared_ptr的循环引用
    classController{public:Controller()=default;~Controller(){std::cout<<"in~Controller"<<std::endl;}classSubController{public:SubController()=default;~SubController(){std::cout&......
  • 【paramiko】基于paramiko封装SSH连接服务器执行命令
    1、官方文档paramiko·PyPIWelcometoParamiko’sdocumentation!—Paramikodocumentation 2、安装pipinstallparamiko 3、示例importparamiko#建立一个sshclient对象ssh=paramiko.SSHClient()#将信任的主机自动加入到host_allow列表,须放在connect......
  • 要将 shimgvw.dll 关联到图像文件的方式可以通过批处理来实现
    shimgvw.dll是一个系统文件,它为Windows提供了一个图像查看器程序。下面是如何使用shimgvw.dll打开图像的方法:打开运行对话框:按下Win+R组合键打开运行对话框。输入命令:在运行对话框中输入“rundll32.exeshimgvw.dll,ImageView_Fullscreen图片路径”,其中“图片路径”是要......
  • shell命令好文分享
    手册页部分1:用户命令 cshhttps://docs.oracle.com/cd/E56344_01/html/E54075/csh-1.html ......
  • Git中Clon或push失败
    Git中Clone失败:解决办法:克隆时把用户名及密码加上,密码中不要包含@符号url=http://[用户名]:[密码]@git路径例如:http://yonghuming:[email protected]:8899/testProject/test.gitpull和push失败报错代码:fatal:couldnotreadUsernamefor原因:原因提示为需要输入......
  • winform控件开发一之复合控件开发(2)开关阀(shut-off valve)
    实现一个开关阀控件,使用自定义控件,显示效果如下所示:其中,上方为线圈状态,下方为阀体状态,如下所示: 当线圈给电时,线圈为绿色;当线圈失电时,线圈为红色;代码中用value1控制当阀门开到位时,阀体状态显示为绿色;当阀门关到位时,阀体状态显示为红色;代码中用value2控制 代码如下:usingS......