执行shell脚本

  • #! /bin/bash
  • 在 Shell 脚本中,#! /bin/bash 是指定脚本使用 Bash 解释器的 shebang 语句。它出现在脚本的第一行,并告诉操作系统使用 Bash 解释器来执行该脚本。
    • 指定解释器#! /bin/bash 指定了使用 Bash 作为脚本的解释器。Bash 是 Unix-like 系统中常见的一种 Shell 解释器。在执行脚本时,操作系统会根据 shebang 语句中的路径找到 Bash 解释器所在位置,并使用它来解释执行脚本内容
    • 特定语法支持:Bash 解释器相比其他 Shell 解释器,例如shdash 等,提供了更多的功能和语法扩展。因此,通过使用 #! /bin/bash,可以确保脚本中使用的特定 Bash 语法和功能能够被正确解释和执行;
    • 兼容性:在大多数 Unix-like 系统中,Bash 解释器都是默认安装的,并且脚本中使用的许多常见 Shell 语法和命令都是基于 Bash 的。使用 #! /bin/bash 可以提高脚本的可移植性,并确保在不同系统上都能正确执行;
  • Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
  • 有不同种类的shell,如sh,bash,csh,最常用的是bash。
  • 执行sh脚本文件的三种方法
  •   ./hello.sh:必须是可执行文件,需要先给sh脚本文件赋予可执行权限chmod +x hello.sh
      
      sh hello.sh:可以不是可执行文件,即不chmod ug+x hello.sh赋予可执行权限
      
      source hello.sh:可以不是可执行文件,即不chmod ug+x hello.sh赋予可执行权限
    
  • source hello.sh 会在当前进程下直接执行sh文件,这个好处就是可以直接访问 作用域为当前进程 的变量
  • ./hello.shsh hello.sh 会重新创建一个全新的子Shell进程(fork+exec)来执行sh文件
    • 1、fork是复制进程,它会复制当前进程的副本(不考虑写时复制的模式),以适当的方式将这些资源交给子进程。所以子进程掌握的资源和父进程是一样的,包括内存中的内容,所以也包括环境变量和变量。但父子进程是完全独立的,它们是一个程序的两个实例。
    • 2、exec是加载另一个应用程序,替代当前运行的进程,也就是说在不创建新进程的情况下加载一个新程序。exec还有一个动作:在进程执行完毕后,退出exec所在的shell环境。
  • export关键字(环境变量)
  • 由于使用了exec,替代了fork出来的子shell进程,又因为不同进程间的数据是无法共享的,所以无法访问父Shell进程创建的局部变量,除非使用export关键字,如 export name = lzm,这样的话,子进程会先在当前进程中查找name,没找到的话会一直递归到父进程中查找。
  • 开启或者关闭一个子bash
  •   bash:开启一个子bash
      
      exit:退出当前bash
      
      echo $$:查看当前bash的进程号
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值