码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【004】Shell脚本以怎样的方式执行?


    文章目录

    • 1. Shell脚步文件的执行顺序
    • 2. 如何调试Shell脚本

    1. Shell脚步文件的执行顺序

    了解Shell脚步内部的执行顺序,对于学习、阅读Shell脚步是非常有帮助的。Shell脚步不是复杂的程序,它是按行解释的,即从.sh脚步文件开头一直执行到文件末尾。值得注意的是,函数只有在显示调用的时候,才会去执行函数的内部,如果该函数不被调用,那么按照从上到下执行院长,遇到函数定义会直接跳过。

    比如对于下面的这段Shell脚步文件:

    #!/bin/sh
    
    echo "START ......"
    var_1="hello world"
    var_2=
    
    test() {
            echo "test function"
            var_2="lxg"
    }
    
    echo ${var_2}
    
    test
    
    echo "END ......"
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    其内部的执行流程如下图所示:

    在这里插入图片描述

    执行结果是:
    在这里插入图片描述
    上面的脚步文件中,echo ${var_2}的结果为空,虽然该变量在函数test中被重新初始化为"lxg",但是test函数的调用是在echo ${var_2}的下一步调用,所示此时的变量var_2的值还是为空。在调用test函数前,test函数定义直接被跳过,只有在显示调用该函数时候才回去执行该函数的内部(从C/C++语言的角度将,就是函数体)。

    2. 如何调试Shell脚本

    Shell脚本不需要编译,也没有类似于gdb这样的调试工具,所以一些基础语法需要在执行时候才知道有没有错误。而无法像C/C++语言那样在编译阶段就可以知晓语法错误。因此这也给Shell开发、调试带来了一点的挑战性。

    我看到很多开发同事在调试Shell脚本时候,根据报错信息提示,一行行地去.sh文件中添加打印日志,其实这种效率是很低下的,无非于在C/C++代码中添加printf()打印。其实在Shell脚本中也有一种类似于gdb效果的调试方法,它可以显示地打印你当前脚本的执行位置和正误情况,是你一目了然地知道当前脚本出错的具体位置。 那就是在sh命令执行添加参数“-x”。这么有用的命令居然在多本讲述Shell的书籍上都未曾提到过。

    这里仍然以上面的那个demo为例,来演示一遍如果调试.sh脚本文件。
    在这里插入图片描述
    如果哪里有语法错误,终端便会进行打印,再结合代码,十分清晰。

  • 相关阅读:
    C#(C Sharp)学习笔记_封装【十八】
    Electron:主进程、渲染进程以及通信
    【LeetCode】104.二叉树的最大深度
    AI :微软推出 AutoGen 框架,帮开发者创建基于大语言模型的复杂应用
    调用别人接口的常用方法htticlient、resultTemple
    3.4 Swaps
    LeetCode题解—15.三数之和
    【云原生 | 42】Docker快速部署高可靠性编程语言Erlang
    【正点原子I.MX6U-MINI应用篇】3、Framebuffer应用编程,操作屏幕
    多输入多输出 | MATLAB实现LSSVM最小二乘支持向量机多输入多输出
  • 原文地址:https://blog.csdn.net/lixiaogang_theanswer/article/details/126839471
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号