随着技术的发展,虽然出现了许多现代的编程语言,但Shell编程由于其独特的优势——简洁性、高效性和在Linux系统中的无处不在,仍然保持着其重要性。
以下是笔者多年积累的一些Shell编程心得,这些心得涵盖了从基础语法到高级功能的各个方面,无论是初学者还是有经验的开发者,都可以从中受益。通过这些心得,你将能够编写出更加高效、健壮且易于维护的Shell脚本,为你的自动化任务和系统管理工作带来便利。
shell文件开头有以”#!”开头的注释,学名Shebang,也称为Hashbang、“蛇棒”,如:
#!/bin/sh
如果编写的a.sh没有开头的注释,执行 ./a.sh时系统会默认用$SHELL指定的解释器,因解释器的兼容性等问题,会出现一些不可预料的问题。
Centos7.6 相关内容示例
推荐写法:
#!/usr/bin/env bash
注释的作用是让代码可读性更强,方便维护人员快速上手;也方便编写人员逻辑梳理。
一般包含以下几部分:
例如:
各个函数前的说明注释
一些较复杂的单行命令注释
最简单的参数个数判断示例
if [[ $## != 2 ]];then
echo "Parameter incorrect."
exit 1
fi
变量大写加下划线在文件头部定义
如:
## configurations
CODE_PATH="/root/work/workspace/og-apus/og-apus"
OGAPUS_RELEASE_FOLDER="/root/work/workspace/og-apus/release"
OGSP4_BUILD_PATH="/root/work/ogsp4-release-env/base/images"
OGAPUS_RELEASE_PATH_ON_PDD="/pdd-release/og-apus/docker-images"
避免魔鬼数字,如果必须使用数字,请用变量定义,并注意变量名称可读性,适当添加变量定义注释。
推荐使用工具自动格式化,vscode + shell-format插件
两种缩进类型:
不评论优劣,推荐两个空格
常见问题:windows下未专门配置过utf8为默认编码格式的编辑器,回车换行是 \r\n, utf8下是\n
常见的出错是通过 ./a.sh执行,但是未对a.sh赋予可执行权限。
实现适当的错误处理机制,如使用 set -e
以在命令失败时停止执行。
使用 set -x
来调试脚本,了解执行流程。
标准文档要有标准日志输出
!!!不要把密码放在脚本里,尤其是公用代码仓库时!!!
使用反斜杠分行,如:
./configure \
–prefix=/usr \
–sbin-path=/usr/sbin/nginx \
–conf-path=/etc/nginx/nginx.conf \
参考:
[ ]: https://www.shellcheck.net/wiki/SC2086 “SC2086”
expr 和 (()),推荐用(()),原因是执行效率高很多倍
## 头部:
## 参数处理,变量定义
## --------
## 函数部分:函数定义
## --------
## 执行逻辑
## 调用函数的逻辑顺序
参考:Linux文件特殊权限SUID、SGID与SBIT-腾讯云开发者社区-腾讯云
偷懒,某种程度上是推动人类进步的一种力量
【星猿科技】:在这里我们共同探索科技新趋势,分享积累的点滴,从人工智能到高性能计算,我们追求技术的进步,同时珍视分享的力量。欢迎关注我们,在科技与影视的精彩世界中一起遨游,发现更多未知!