-
博文分类专栏
- Jquery基础教程
-
- 文章:(15)篇
- 阅读:46566
- shell命令
-
- 文章:(42)篇
- 阅读:154239
- Git教程
-
- 文章:(36)篇
- 阅读:234850
- leetCode刷题
-
- 文章:(76)篇
- 阅读:131794
-
shell脚本中第一行#!/bin/bash作用是什么的呢?2018-03-23 19:23 阅读(14187) 评论(0)
一、简介
我们在shell脚本中,第一行往往是:
#!/bin/bash
这一行的作用是什么呢?
作用是指定当前脚本使用什么解释器来执行,也就是说使用哪一种Shell来执行。
说白了,系统会自动将shell文件名和传递的参数,作为参数,传递给#!后面的shell去执行。
1、如果脚本文件中没有#!
此时,会以当前shell($shell环境变量)去解释这个脚本。
2、如果#! 后面跟着可执行文件
此时,会将当前shell文件名和传递的参数,作为参数传递给可执行文件执行。
比如文件test.sh :
#!/bin/bash echo "文件名:$0" echo "当前参数个数:$#"
执行: ./test.sh www.findme.wang,其实是等同于执行如下命令:
/bin/bash ./test.sh www.findme.wang
他们的执行结果如下:
当然,我们可以在#!后面放置一个,自己编译的二进制文件。比如我搞一个简单的go文件,内容如下:
package main import ( "fmt" "flag" ) func main(){ flag.Parse() args := flag.Args() fmt.Println("开始打印传递的参数哦") for _,val:= range args { fmt.Println(val) } fmt.Println("传递所有的参数打印完毕") }
主要是打印传递的所有参数。然后执行:
go build test.go
生成可执行文件test
测试可执行文件如下:
可以看出,test可执行文件,能够打印所有传递的参数。
现在我们来使用test文件,测试shell脚本中,如下:
#!/home/dequan/project/go/src/test/test echo "文件名:$0" echo "当前参数个数:$#"
可以看出#!后面跟着的是我们通过go生成的可执行文件,测试如下:
./test.sh www.findme.wang
执行结果如下:
提示:如果#!后面的可执行文件不可以执行,就会报错,比如,我们修改一下test文件的权限
-rw-------. 1 dequan test 1.7M May 4 19:20 test
当在执行上面的脚本时候,提示:permission denied: ./test.sh
如果#!后面的可执行文件不存在,则会报错“bad interpreter: /home/dequan/project/go/src/test/test1: no such file or directory”