首页 > 系统相关 >【Linux】Shell 编程规范及检查工具推荐

【Linux】Shell 编程规范及检查工具推荐

时间:2024-09-23 13:55:11浏览次数:11  
标签:脚本 语句 建议 Shell 编程 命令 Linux

本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!

如果对您有帮助,烦请点赞、关注、转发、订阅专栏!


专栏订阅入口

| 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 |


往期精彩文章

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法(续)

【Linux】全面讲解 Shell 变量的那些事


目录

一、基本介绍

1、Shell 编程

2、Shell 脚本

二、编程规范

三、检查工具推荐

1、ShellCheck 简介

2、ShellCheck 使用


一、基本介绍
1、Shell 编程

Shell 编程是指使用 Shell 命令作为程序语言,设计、编写、测试、维护脚本型程序的过程,Shell 命令是 Shell 编程的实现语句和实现方法,Shell 脚本则是 Shell 编程的实现产物。

此外,Shell 编程还会涉及到以下几个方面的内容:

  • 对 Shell 环境的理解
  • 对变量和函数的使用
  • 对条件语句、循环控制语句等复杂逻辑的应用
  • 对程序错误的处理和调试技巧

2、Shell 脚本

Shell 脚本可以看作是一种按照既定逻辑顺序执行的 Shell 命令集合,可以包含简单操作命令(如 cd、cp、mv 等操作),也可以包含复杂逻辑区块(如条件语句、循环语句、函数等)。Shell 脚本是一种不需要编译的解释性程序,因此具有快速编写、方便测试的特点,有助于运维工程师简化研发流程、提高工作效率。

Shell 脚本主要用于在类 Unix 系统(如 Linux、macOS 等)中完成以下工作:

  • 执行批处理任务:如批量安装软件、生成系统配置等
  • 实现自动化过程:如自动处理大量文本内容、自动备份数据等
  • 管理操作系统:如监控系统资源、与调度工具(Crontab 等)结合定期执行任务等

虽然 Shell 编程与其他主流编程语言相比而言略显粗陋,但笔者认为编程的核心思想应该是一致的。同时为了避免出现异常问题、便于他人阅读和管理,构建 Shell 脚本时也应当遵循一定的编程规范。

本文总结了 20 余条常用编程规范,并推荐一种 Shell 脚本检查工具,帮助大家养成良好的 Shell 编程习惯。


二、编程规范
  • 建议在 Shell 脚本创建时,以 .sh 作为文件名结尾,方便识别文件类型

  • 建议赋予 Shell 脚本适当的执行权限,允许以 ./xxx.sh 的形式运行脚本;若没有赋予执行权限,只能以 /bin/bash xxx.sh 的形式运行脚本,非 root 用户还需要加上 sudo

  • 建议在 Shell 脚本的开头处使用 #! 指定命令行解释器(如 #!/bin/bash)

  • 建议在 Shell 脚本的结尾处使用 main "$@" 指定程序的入口,增强脚本的结构化程度

  • 建议在 Shell 脚本中通过 $(cd `dirname $0`;pwd) 获取当前脚本的路径,并以此为基准查找其他路径

  • 建议在 Shell 脚本的内容中勤用 # 标明注释,充分解释脚本语句或逻辑区块的用途、注意事项等,方便自己和他人阅读,提升理解效率
  • 建议对传入 Shell 脚本的参数进行检查(如判断个数是否符合预设),避免脚本运行异常
  • 建议 Shell 变量的名称尽量直观易理解且风格统一,形式可以为驼峰型、下划线分隔单词等
  • 建议充分考虑环境变量、局部变量在不同 Shell (父 Shell、子 Shell)下的作用域,确保其在被引用时能够生效
  • 建议在 Shell 脚本中引用 Shell 变量时,尽量采用 "$var" 或 "${var}" 形式,而不是 $var ,避免因变量值存在空格导致取值异常等问题
  • 建议在 Shell 脚本中将多次出现的常量统一赋值给一个变量,方便在常量发生变化后快速修改,提升脚本的可配置能力
  • 建议在 Shell 脚本中养成良好的缩进习惯,使脚本内容具有清晰易读的层级结构,有助于避免将直接执行的命令与函数体搞混
  • 建议在 Shell 脚本中为关键命令语句的输出添加回显或将其重定向至日志文件,方便在脚本运行出现异常时进行排查和调试;回显可以通过 echo -e "\033[2;32m xxxxxxx \033[0m" 命令设置颜色、高亮等特效提升输出效果
  • 建议在 Shell 脚本中使用 >/dev/null 过滤不友好的输出信息,避免因无用信息过多而漏掉重要信息
  • 建议在 Shell 脚本中使用绝对路径,避免使用相对路径,否则需要注意目录的切换
  • 建议在 Shell 脚本中通过命令语句的返回值 $? 判断命令语句是否执行成功,$? 为 0 时表示执行没有错误
  • 建议在 Shell 脚本中处理文件前判断文件是否存在,并做好异常处理
  • 建议在 Shell 脚本中使用 [[ ]] 代替 [ ]
  • 建议在 Shell 脚本中使用 && 和 || 写成单行形式,替代简单的 if 语句,如用 [[ x > 2 ]] && echo x 替代 if x >2 ;then echo x,以提升执行效率和阅读体验
  • 建议在 Shell 脚本中使用 function func() {} 形式来定义函数,而不是 function func {} 形式
  • 建议在 Shell 脚本中使用 $(命令) 的形式,将命令的结果赋给变量,而不是 `命令` 形式
  • 建议在 Shell 脚本中使用 Shell 变量替换语句,代替 awk、sed 语句处理字符串
  • 建议在 Shell 脚本中复制文件夹时使用 cp -r 命令,如果目标文件夹不存在则创建,如果存在则复制为子文件夹
  • 建议在 Shell 脚本中尽量不要处理 ls 后的数据,如 for i in $(ls),因为 ls 的结果非常不确定并且与平台有关
  • 建议在 Shell 脚本中尝试使用 trap 捕获异常信号,并在接收到终止信号时执行一些收尾工作
  • 建议在 Shell 脚本中不要记录密码、密钥等敏感信息
  • 建议在 Shell 脚本中出现长命令时,通过反斜杠 \ 进行分行,以提升阅读体验
  • 建议在 Shell 脚本中尽量使用精简命令,如采用单条命令代替多条命令或管道命令,提升脚本运行效率
  • 建议在 Shell 脚本中存在可以同时执行、互不关联的命令时,采用 & 和 wait 方式实现并发,提升脚本运行效率
  • 建议在 Shell 脚本中采用 cat>> filename << EOF 方式将指定内容写入文件,而不是采用 echo xxx >> filename 方式逐行写入


三、检查工具推荐
1、ShellCheck 简介

ShellCheck 是一种静态分析工具,专门用于分析 Shell 脚本。

ShellCheck 的强大之处在于,它不仅能够识别 Shell 脚本中存在的问题,还可以针对性地提供清晰、有效的改进建议,帮助开发者快速定位并修复这些问题,进而提高 Shell 脚本的编写质量和维护效率。

ShellCheck 能够识别的问题包括但不限于:

  • 语法错误
  • 逻辑漏洞
  • 代码风格问题
  • 潜在的安全风险

2、ShellCheck 使用
  • 方式一:在线检查

访问 ShellCheck 在线服务,粘贴 Shell 脚本内容即可开始自动检查,并输出检查结果。

  • 方式二:本地安装后检查

安装方法如下:

# CentOS 系统
yum install -y ShellCheck

# Ubuntu 系统
apt install -y shellcheck

使用方法如下:

shellcheck xxx.sh

标签:脚本,语句,建议,Shell,编程,命令,Linux
From: https://blog.csdn.net/2401_82795112/article/details/142031591

相关文章

  • Linux 文件压缩和解压缩命令
    Linux文件压缩和解压缩命令在Linux操作系统中,文件压缩和解压缩是日常管理和维护任务中的重要一环。通过压缩文件,可以显著减少存储空间的使用,并加快网络传输速度。Linux提供了多种压缩和解压缩工具,每种工具都有其特定的格式和优势。以下是一些常用的Linux文件压缩和解压缩命令及......
  • 【PAM】Linux登录认证限制
    PAM(PluggableAuthenticationModules,可插拔认证模块)是一种灵活的认证框架,用于在Linux和其他类Unix系统上管理用户的身份验证。PAM允许系统管理员通过配置不同的认证模块来定制应用程序和服务的认证方式,而不需要修改这些应用程序的源代码。0、PAM介绍PAM的核心概念......
  • g++。gcc在linux下的适用
    gcc和g++编译器的常用命令行参数非常丰富,这些参数在编译过程中起着至关重要的作用。以下是一些常用的命令行参数及其解释:一、编译过程控制预处理(Pre-processing)-E:只执行预处理操作,不进行编译、汇编和链接。预处理过程包括宏替换、条件编译、头文件展开、删除注释等,输出预处理......
  • 带你0到1之QT编程:十七、Http协议实战,实现一个简单服务器和一个客户端进行http协议通信
    此为QT编程的第十七谈!关注我,带你快速学习QT编程的学习路线!每一篇的技术点都是很很重要!很重要!很重要!但不冗余!我们通常采取总-分-总和生活化的讲解方式来阐述一个知识点!码农不易,各位学者学到东西请点赞支持支持!开始部分:总:此次实战主要是模拟一个http协议进行网络通信的一......
  • 带你0到1之QT编程:十八、最简单之TCP协议工作原理及实战编程
    此为QT编程的第十八谈!关注我,带你快速学习QT编程的学习路线!每一篇的技术点都是很很重要!很重要!很重要!但不冗余!我们通常采取总-分-总和生活化的讲解方式来阐述一个知识点!码农不易,各位学者学到东西请点赞支持支持!开始部分:总:此次实战主要是实现一个客户端,一个服务端,来了解TC......
  • Linux网络命令
    1.ping测试网络连通性-c指定ping次数      ping -c4   4次停-i   指定间隔时间-s   指定数据包的大小2.ifconfig查询本机网络信息  作用与  ipa|addr相同ifconfig命令使用方法命令:ifconfig              ......
  • 【Python高级编程案例】-第1课时-Python 自带邮件模块自动发送邮件
    importrandomimportstringfromsmtplibimportSMTP_SSLfromemail.mime.textimportMIMETextfromemail.headerimportHeader#发送邮件,参数为收件邮箱地址和验证码defsend_email(receiver,code):sender="测试<[email protected]>"#邮箱账号,签名#......
  • 高颜值!一款基于 Flutter 开发的 Linux 服务器工具箱
    大家好,我是Java陈序员。今天,给大家介绍一款高颜值的基于Flutter开发的Linux服务器工具箱。关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。项目介绍flutter_server_box——一款使用Flutter开发的Linux服务器工具箱,提......
  • linux中vim编辑器的应用实例
    前言Linux有大量的配置文件,其中编辑一些配置文件,最常用的工具就是Vim ,本文介绍一个实际应用的Vim编辑器开发文档的实例。Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。Vim是自由软件。Vim可以当作vi的升级版本,它可以用多......
  • shell编程二
    4.3.4.2特殊变量-状态变量1.windows下书写的脚本,脚本文件复制到Linux执行异常的故障案例'''现象:windows下书写的脚本,上传到Linux执行报错.原因:windows下面的回车换行\r\n,linux下面回车换行\n解决:替换结束标记即可.dos2unixwindows-->linux'''[root@ubuntu2204......