文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-12-03 02:33

关注

本文转载自微信公众号「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常用命令内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯