聊一聊脚本执行方式,你学会了吗?

系统 Linux
Shell脚本的后缀一般为“.sh”,脚本第一行一般都是指向执行Shell,例如“#!/bin/bash”。【#!】指定解释脚本执行的Shell。

[[408733]]

本文转载自微信公众号「Linux常用命令」,作者妖生。转载本文请联系Linux常用命令公众号。

Shell脚本的后缀一般为“.sh”,脚本第一行一般都是指向执行Shell,例如“#!/bin/bash”。【#!】指定解释脚本执行的Shell。

执行Shell脚本有多种方式,我们可以直接使用【sh xx.sh】或者【bash xx.sh】来执行Shell,也可以使用【./xx.sh】、【/shell/xx.sh】,或者【source .sh】、【. xx.sh】。

它们有什么区别呢?测试脚本如下:

  1. [root@yaomm shell]# cat testShell.sh    ##  查看演示Shell脚本 
  2. #!/bin/bash 
  3. cd /opt  ;          # 切换到/opt目录去 
  4. pwds=`pwd`;         # 查看当前路径 
  5. pids=$$;        # 查看当前进程 
  6. users=`whoami`; # 查看当前用户 
  7. echo "当前路径: ${pwds},当前进程PID:${pids},当前用户: ${users}" 

sh方式执行(也可以使用bash):

  1. [root@yaomm shell]# echo $$     ##  查看当前cli(命令行)界面的进程号 
  2. 22524                       ##  每次登录Shell时打开的Shell界面进程号 
  3.  
  4. [root@yaomm shell]# sh testShell.sh             ##  使用bash执行 
  5. 当前路径: /opt,当前进程PID:10836,当前用户: root ##  输出当前切换路径、进程号、用户名 
  6. [root@yaomm shell]# echo $users             ##  子Shell中变量打印为空 

相对路径方式执行(也可以使用绝对路径):

  1. [root@yaomm shell]# ./testShell.sh              ##  使用路径执行,没有权限 
  2. -bash: ./testShell.sh: Permission denied            ##  没有执行权限 
  3. [root@yaomm shell]# chmod +x testShell.sh       ##  赋予执行权限 
  4. [root@yaomm shell]# ./testShell.sh              ##  使用路径执行 
  5. 当前路径: /opt,当前进程PID:10873,当前用户: root ##  与bash执行的结果类似 
  6. [root@yaomm shell]# echo $users             ##  子Shell中变量打印为空 

source方式执行(也可以使用点.):

  1. [root@yaomm shell]# source testShell.sh         ##  使用source执行 
  2. 当前路径: /opt,当前进程PID:22524,当前用户: root ##  进程号 
  3. [root@yaomm opt]#                           ##  看到当前目录已经被切换到/opt下了 
  4. [root@yaomm opt]# echo $users               ##  source执行,子Shell中变量被赋值 
  5. root            ##  $users成为全局环境变量,不过重新登陆Shell后还是会消失 

sh、source不需要执行权限就可以运行Shell脚本,为什么?因为Shell脚本只是作为一个参数传递到sh、bash、source命令中,使用的是bash这些脚本的权限。而路径执行,则使用的是被执行脚本文件本身的权限,所以需要赋权x。

sh与source执行也是有区别的,sh执行脚本会打开(fork)一个子进程(也叫子Shell、Sub Shell),Shell脚本内的环境变化不会影响到当前Shell进程(父进程、父Shell)。

source不创建Sub Shell,在当前Shell环境下读取并执行脚本文件中的命令,相当于顺序读取并执行“.sh”文件里面的命令。

还有其他执行脚本的方式,不常用,不再赘述。

最后,用一张表来总结下,Shell执行的几种方式和区别。

执行命令 示例 权限 打开子进程 说明
sh、bash bash test.sh、h test.sh 不需要 sh、bash都是使用/usr/bin/bash
./、/ ./test.sh、/shell/test.sh 需要 相对路径、绝对路径执行,需要有脚本文件的执行权限
.、source . test.sh 、source test.sh 不需要 点+空格等同source,source执行脚本相当于把脚本中语句逐行读取并在命令行界面执行
<、| sh>test.sh、cat tst.sh | bash 不需要 对有参数的脚本不支持
exec exec ./test.sh 需要 替换当前进程资源,不要在命令行界面执行,否则登录Shell界面会被直接关闭

 

责任编辑:武晓燕 来源: Linux常用命令
相关推荐

2023-07-26 07:24:07

2021-07-16 11:48:26

模型 .NET微软

2023-08-01 12:51:18

WebGPT机器学习模型

2024-01-02 12:05:26

Java并发编程

2023-12-27 09:32:47

SQL语句数据

2023-01-31 08:02:18

2024-03-06 08:28:16

设计模式Java

2022-12-06 07:53:33

MySQL索引B+树

2022-06-16 07:50:35

数据结构链表

2024-02-02 11:03:11

React数据Ref

2023-10-06 14:49:21

SentinelHystrixtimeout

2023-05-05 06:54:07

MySQL数据查询

2023-08-26 21:34:28

Spring源码自定义

2022-07-13 08:16:49

RocketMQRPC日志

2023-07-30 22:29:51

BDDMockitoAssert测试

2023-06-26 13:08:52

GraphQL服务数据

2023-03-26 22:31:29

2022-02-09 23:02:53

Vuex开发管理模式

2024-03-01 08:13:45

Shell编程解释器

2023-05-09 08:25:26

Gaussdb数据库开源数据库
点赞
收藏

51CTO技术栈公众号