执行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的进程号
    
在Linux系统中运行Shell脚本的方法有多种,以下是几种常见且实用的方式: 1. **直接使用解释器运行脚本** 可以通过直接调用Shell解释器(如 `bash` 或 `sh`)来运行脚本。例如,如果脚本文件名为 `myscript.sh`,可以使用以下命令运行: ```bash bash myscript.sh ``` 或者,如果脚本使用的是 `sh` 解释器: ```bash sh myscript.sh ``` 2. **赋予脚本执行权限后运行** 首先需要为脚本文件添加可执行权限: ```bash chmod +x myscript.sh ``` 然后通过 `./` 运行脚本: ```bash ./myscript.sh ``` 这种方法要求脚本的第一行指定了解释器,例如: ```bash #!/bin/bash ``` 如果未指定解释器,系统会使用当前登录用户的默认Shell(如Bash)来执行脚本 [^1]。 3. **在当前Shell环境中运行脚本** 使用 `source` 命令或 `.`(点号)在当前Shell执行脚本,而不会启动新的子Shell: ```bash source myscript.sh ``` 或者: ```bash . myscript.sh ``` 这种方法适用于需要修改当前Shell环境变量或状态的脚本 [^2]。 4. **通过子Shell运行脚本** 在默认情况下,使用 `bash myscript.sh` 或 `sh myscript.sh` 会在当前Shell中启动一个子Shell环境来运行脚本脚本执行完毕后,子Shell会自动关闭,控制权返回到父Shell [^2]。 5. **定时运行脚本** 如果需要定期执行脚本,可以使用 `cron` 工具设置定时任务。例如,在 `crontab` 中添加以下条目,每天凌晨1点运行脚本: ```bash 0 1 * * * /path/to/myscript.sh ``` 同时,可以通过重定向标准输出和标准错误输出来记录脚本执行结果,例如: ```bash #!/bin/bash outfile=$HOME/outfile.out echo "此脚本会在$(date +%B%d,%T)运行" > $outfile echo >> $outfile echo "此脚本使用的是$SHELL shell." >> $outfile echo >> $outfile sleep 4 echo "脚本运行结束" >> $outfile exit ``` 这样可以将脚本的输出保存到指定文件中,便于后续查看和调试 [^3]。 6. **后台运行脚本** 如果希望脚本在后台运行,可以在命令末尾添加 `&`: ```bash ./myscript.sh & ``` 这样可以释放当前终端,同时脚本在后台继续执行。 7. **使用nohup命令运行脚本** 如果希望脚本在终端关闭后仍然继续运行,可以使用 `nohup` 命令: ```bash nohup ./myscript.sh & ``` 这样即使终端关闭,脚本也会继续执行,并将输出重定向到 `nohup.out` 文件中。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值