iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何写出健壮可靠的shell脚本
  • 822
分享到

如何写出健壮可靠的shell脚本

2023-06-16 02:06:55 822人浏览 安东尼
摘要

如何写出健壮可靠的shell脚本,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。如果秉承着能跑就行的态度写shell脚本,是很自在的,但是如果你想要写出健壮,可靠

如何写出健壮可靠的shell脚本,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

如果秉承着能跑就行的态度写shell脚本,是很自在的,但是如果你想要写出健壮,可靠的shell脚本,可没那么容易。那么有什么可操作的经验或者方法吗?

语法检查

第一个最简单的方法就是利用工具对脚本进行检查,最大程度地发现shell脚本中存在的语法错误,如果你还不知道,建议你绝对不要错过。

而为了保证脚本健壮可靠,那么就需要保证脚本在一些特殊的情况及早出现,避免漏网之鱼。来看看有哪些可行的技巧。

脚本失败时即退出

可以在脚本的开头设置如下:

set -e

举个例子:

#!/bin/bashset -elp #这里运行会出错date

这种情况下,运行一旦出错就会退出,不放过一个问题:

$ ./test.shlp: Error - no default destination available.

当然了,这也有不好的地方,有时候命令执行本来就可能是失败的,你还是希望它继续,可以临时加上|| true:

#!/bin/bashset -elp || true date

不过个人觉得这样的设置用处不是特别大,因为很多时候就是需要处理不同的错误情况,而这样只能要么遇到错误退出,要么认为正确,导致无法走到异常分支。

通过set +e设置回来:

set -e#commandset +e#other command

打印脚本执行过程

调试阶段,你可能想知道整个过程是执行了哪些命令,每条命令都具体执行了什么,可以利用下面的方式执行:

sh -x test.sh

或者,和上面类似,在开头加上set -x:

//来源:公众号【编程珠玑】//作者:守望先生#!/bin/bashset -xif [ $# -lt 1 ]then     echo "no para"else     echo "para 1 $1"fi

执行时,输出如下:

+ [ 0 -le 1 ]+ echo no parano para

前面带+的内容就是命令实际执行的,你可以看到比较条件是什么,变量被展开成了具体内容,走到了哪个分支,非常清楚。

显示未定义的变量

shell中变量没有定义,仍然是可以使用的,但是它的结果可能不是你所预期的。举个例子:

//来源:公众号【编程珠玑】//作者:守望先生#!/bin/bashif [ "$var" = "abc" ]then     echo " not abc"else     echo " abc "fi

这里本来想判断var的内容是否为abc,实际上var并没有定义,但是在这里使用并没有报错,如果我们想早点发现这类问题,避免在复杂的脚本中问题被掩盖,那么可以在开头加上:

set -u

再次运行就会提示:

test.sh: 5: test.sh: num: parameter not set

再想象一下,你本来想删除:

rm -rf $dir/*

然后dir是空的时候,变成了什么?

是不是有种后背发凉的感觉?

管道命令一个失败时整个失败

有时候我们可能会执行类似这样的命令:

cat test.sh |grep if | cut -d ';' -f 2

三条命令一行执行,如果我们希望在其中一条失败,整个命令就失败,而避免执行后面无意义的命令,那么可以在开始设置:

set -o pipefail

不设置的情况下,cat  test.sh即使执行失败了,后面的grep实际上还会继续执行,可能会导致一些意想不到的情况发生,如果不想这样的情况发生,那么这样设置是有帮助的。

对于静态变量使用readonly

通常我们会在脚本开头定义一些静态变量:

MY_PATH=/usr/bin

而为了避免MY_PATH被意外修改,可以这样:

readonly MY_PATH=/usr/bin

这样的话,一旦后面有命令尝试修改,就会报错。

#!/bin/bashreadonly MY_PATH=/usr/binMY_PATH=/usr/local/bin

运行一下试试:

$ ./test.shtest.sh: 3: test.sh: MY_PATH: is read only

看,给你提示了!

给变量设置可选的初始值

例如:

name=${1:-shouwang}echo "${name}"

这里让name为$1,即第一个参数,而当它为空时,令name为shouwang。

多条命令执行使用&&

例如:

cmd0;cmd1;cmd1

这里如果cmd0失败了,后面的命令仍然会执行,而如果不希望后面的命令执行,可以使用:

cmd0 && cmd1 && cmd1

使用函数

脚本本身比较短还好,而脚本一旦变长,不使用函数,将使得脚本很难维护,可读性也很差。

总结

实际上最开始介绍的脚本检查工具就已经非常有效了,基本的错误都能检查出来,而其他的内容,更多的是关注于脚本调试,不放过任何一个可能的错误。

最后,还是优先推荐shellcheck工具。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: 如何写出健壮可靠的shell脚本

本文链接: http://www.lsjlt.com/news/282054.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何写出健壮可靠的shell脚本
    如何写出健壮可靠的shell脚本,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。如果秉承着能跑就行的态度写shell脚本,是很自在的,但是如果你想要写出健壮,可靠...
    99+
    2023-06-16
  • 写出健壮Bash Shell脚本技巧教程
    本篇内容介绍了“写出健壮Bash Shell脚本技巧教程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用set -u你因为没有对变量初始化...
    99+
    2023-06-09
  • 如何编写健壮且可靠的 Golang 函数测试?
    编写健壮且可靠的 go 语言函数测试包括:模拟依赖项:使用 mockito 等库创建模拟对象以隔离函数。处理并发:使用 goconvey 等框架编写并发测试以模拟并发情况。编写集成测试:...
    99+
    2024-04-16
    golang 函数测试 git
  • 编写健壮的Bash脚本的方法教程
    这篇文章主要讲解了“编写健壮的Bash脚本的方法教程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“编写健壮的Bash脚本的方法教程”吧!shell脚本在运行异常时会受到非常大的影响。本文介绍...
    99+
    2023-06-09
  • Shell脚本编写的可靠建议有哪些
    今天就跟大家聊聊有关Shell脚本编写的可靠建议有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 指定bashshell 脚本的第一行,#!之后应该是什么?如果拿这个问题去问...
    99+
    2023-06-09
  • 如何写好shell脚本
    这篇文章给大家分享的是有关如何写好shell脚本的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言产品的最终用户通常不懂技术,所以不管你怎么折腾产品代码都无所谓。但脚本代码不一样,它们是开发人员写给开发人员的。有...
    99+
    2023-06-09
  • PHP PDO 最佳实践:写出健壮且可维护的代码
    1. 采用 prepared statement Prepared statement 是一种预编译的 SQL 语句,可以防止 SQL 注入。在使用 prepared statement 时,将查询参数作为参数传递,而不是直接嵌入 SQ...
    99+
    2024-02-17
    PHP PDO 最佳实践 数据访问层 SQL 注入
  • JavaScript错误处理:如何提高代码的可靠性和健壮性
    JavaScript错误类型 JavaScript错误主要分为以下几类: 语法错误:这是最常见的一种错误,是指代码中存在语法错误,导致程序无法正确解析。例如,缺少分号、括号不匹配等都可能导致语法错误。 运行时错误:这指的是程序在运行过...
    99+
    2024-02-27
    JavaScript、错误处理、异常、try-catch、throw、debugger
  • linux如何编写shell脚本
    编写Linux的shell脚本可以使用任何文本编辑器,如vi、nano、gedit等。以下是编写shell脚本的一般步骤:1. 打开...
    99+
    2023-09-15
    linux shell
  • 如何编写Linux Shell脚本
    这篇文章主要为大家展示了“如何编写Linux Shell脚本”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何编写Linux Shell脚本”这篇文章吧。代码风格规范开头有“蛇棒”所谓sheba...
    99+
    2023-06-16
  • JavaScript 代码优化秘籍:如何让你的代码更健壮、更可靠
    1. 使用严格模式 严格模式是 JavaScript 中的一种语法模式,它可以帮助您更早地发现错误并确保您的代码更安全。要使用严格模式,您可以在脚本的顶部添加"use strict";语句。例如: "use strict"; // 你...
    99+
    2024-02-27
    JavaScript 优化、代码质量、性能优化、可靠性
  • 如何编写Shell脚本注释
    本篇内容介绍了“如何编写Shell脚本注释”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、单选注释以“#”开头的行就是注释,会被解释器忽略...
    99+
    2023-06-09
  • linux中如何编写shell脚本
    在Linux中,可以使用任何文本编辑器编写Shell脚本。以下是编写Shell脚本的一般步骤: 打开终端并创建一个新的文本文件,...
    99+
    2023-10-23
    linux shell
  • 编写可靠Bash脚本的技巧有哪些
    这篇文章主要讲解了“编写可靠Bash脚本的技巧有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“编写可靠Bash脚本的技巧有哪些”吧!在写脚本时,在一开始...
    99+
    2024-04-02
  • Java和Unix Shell编程学习笔记:如何编写可重用的Shell脚本?
    Shell脚本是Unix系统中常用的一种脚本语言,它可以通过命令行界面或者脚本文件来执行一系列的操作。而编写可重用的Shell脚本则可以大大提高脚本的灵活性和可维护性,使得我们可以更加高效地完成工作。本文将介绍如何编写可重用的Shell脚...
    99+
    2023-09-12
    shell unix 学习笔记
  • 如何使用PHP编写安全可靠的Shell接口?
    PHP是一种流行的服务器端脚本语言,可用于创建动态Web页面和应用程序。Shell是一种通用的命令行界面,用于执行各种任务和管理操作系统。当这两种技术结合在一起时,可以创建一个功能强大的Shell接口,使用户能够与服务器进行交互并执行各种操...
    99+
    2023-08-31
    shell 接口 编程算法
  • Windows下如何使用PHP编写Shell脚本?
    在Windows操作系统下,使用PHP编写Shell脚本可以帮助我们自动化执行各种任务,从而提高效率。接下来,我们将介绍如何在Windows下使用PHP编写Shell脚本。 首先,我们需要安装PHP。可以在PHP官网下载Windows版本的...
    99+
    2023-07-01
    path windows shell
  • shell脚本中如何获取命令的输出
    这篇“shell脚本中如何获取命令的输出”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“shell脚本中如何获取命令的输出”文...
    99+
    2023-06-29
  • 如何编写监控网站是否可以正常打开的Shell脚本
    本篇内容介绍了“如何编写监控网站是否可以正常打开的Shell脚本”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!代码如下:#!/bin/bas...
    99+
    2023-06-09
  • 如何实现可控多线程shell脚本
    这篇文章将为大家详细讲解有关如何实现可控多线程shell脚本,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。先来 1 段场景描述:某日,在鹅厂接到了这个任务,需要在Linux服务器中,对几千个IP进行一次P...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作