linux shell bin sh,shell脚本中第一行#!/bin/bash作用是什么的呢?

2023-05-16

一、简介

我们在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

他们的执行结果如下:

8ccb892bf131092ca9ae9d2a1bf86867.png

当然,我们可以在#!后面放置一个,自己编译的二进制文件。比如我搞一个简单的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

测试可执行文件如下:

1f6ccd7783ead87a741f965aad379c47.png

可以看出,test可执行文件,能够打印所有传递的参数。

现在我们来使用test文件,测试shell脚本中,如下:#!/home/dequan/project/go/src/test/test

echo "文件名:$0"

echo "当前参数个数:$#"

可以看出#!后面跟着的是我们通过go生成的可执行文件,测试如下:./test.sh www.findme.wang

执行结果如下:

14c0f859e7ea190002949d0dee9982d2.png

提示:如果#!后面的可执行文件不可以执行,就会报错,比如,我们修改一下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”

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux shell bin sh,shell脚本中第一行#!/bin/bash作用是什么的呢? 的相关文章

随机推荐