在 Linux 中编写有效 Bash 脚本的 10 个有用技巧
Shell 脚本是 Linux 中您可以学习/执行的最简单的编程形式。更重要的是,它是系统管理的必备技能,可以自动执行任务、开发新的简单实用程序/工具等等。
在本文中,我们将分享 10 个编写有效可靠的 bash 脚本的有用且实用的技巧,包括:
1. 始终在脚本中使用注释
这是推荐的做法,不仅适用于 shell 脚本,也适用于所有其他类型的编程。在脚本中写注释可以帮助您或其他浏览脚本的人了解脚本的不同部分的作用。
首先,使用#
符号来定义评论。
#Example is the best site for all kind of Linux articles
2. 失败时退出脚本
有时,即使某个命令失败,bash 也可能继续执行脚本,从而影响脚本的其余部分(最终可能导致逻辑错误)。使用下面的行在命令失败时退出脚本:
#let script exit if a command fails set -o errexit OR set -e
3. 当 Bash 使用未声明的变量时退出脚本
Bash 还可能尝试使用未声明的脚本,这可能会导致逻辑错误。因此,当 Bash 尝试使用未声明的变量时,请使用以下行指示 Bash 退出脚本:
#let script exit if an unsed variable is used set -o nounset OR set -u
4.使用双引号引用变量
引用时使用双引号(使用变量的值)有助于防止单词分裂(关于空格)和不必要的通配符(识别和扩展通配符)。
看看下面的例子:
#!/bin/bash #let script exit if a command fails set -o errexit #let script exit if an unsed variable is used set -o nounset echo "Names without double quotes" echo names="Example FOSSMint Linusay" for name in $names; do echo "$name" done echo echo "Names with double quotes" echo for name in "$names"; do echo "$name" done exit 0
保存文件并退出,然后按如下方式运行:
$ ./names.sh
5. 在脚本中使用函数
除了非常小的脚本(只有几行代码)外,请始终记得使用函数来模块化代码,并使脚本更具可读性和可重用性。
编写函数的语法如下:
function check_root(){ command1; command2; } OR check_root(){ command1; command2; }
对于单行代码,在每个命令后使用终止字符,如下所示:
check_root(){ command1; command2; }
6. 使用 = 代替 == 进行字符串比较
请注意,==
是的同义词=
,因此仅使用单个=
进行字符串比较,例如:
value1=”example.com” value2=”fossmint.com” if [ "$value1" = "$value2" ]
7. 使用 $(command) 代替传统的 'command' 进行替换
命令替换用命令的输出替换命令。使用$(command)
而不是反引号`command`
进行命令替换。
shellcheck 工具也推荐这样做(显示 shell 脚本的警告和建议)。例如:
user=`echo “$UID”` user=$(echo “$UID”)
8.使用只读声明静态变量
静态变量不会改变;一旦在脚本中定义,其值就无法改变:
readonly passwd_file=”/etc/passwd” readonly group_file=”/etc/group”
9. 环境变量名称使用大写,自定义变量名称使用小写
所有 bash 环境变量都以大写字母命名,因此请使用小写字母来命名自定义变量以避免变量名冲突:
#define custom variables using lowercase and use uppercase for env variables nikto_file=”$HOME/Downloads/nikto-master/program/nikto.pl” perl “$nikto_file” -h “$1”
10. 始终对长脚本进行调试
如果您编写的 bash 脚本包含数千行代码,查找错误可能会成为一场噩梦。要在执行脚本之前轻松修复问题,请执行一些调试。通过阅读下面提供的指南来掌握此技巧:
就这些!你还有其他最好的 bash 脚本实践可以分享吗?如果有,请使用下面的评论表来分享。