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

一、简介

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值