bash的良好编码实践

在构建脚本时,一点点的一致性和谨慎从长远来看是值得的。

最好的bash脚本不仅可以工作,而且编写的方式也很容易理解和修改。这在很大程度上来自于对变量使用一致的名称和一致的编码风格。验证用户提供的参数是否正确,检查命令是否成功运行,也可以使脚本长时间可用。以下是一些对我有用的建议。

使用良好的压痕

它确实使代码更具可读性,因此也更易于维护。这一点尤其正确

当你有超过三个层次的逻辑。缩进可以很容易地看到脚本逻辑的基本形式。缩进多少空格并不重要,尽管大多数人似乎使用4或8个空格。只要把你该做的和该做的做好,你就会没事的。

#!/bin/bash if [$# -ge 1] && [-d $1]; /bin/bash然后在' ls $1 '的文件做if [$debug == "on"];然后echo working on $file fi wc -l $1/$file done else echo "USAGE: $0 directory" exit 1 fi

提供使用语句

使用语句可以帮助任何运行您的脚本的人——甚至是两年后的您自己——了解它们应该作为什么来提供

参数。

如果[$# == 0];然后返回"Usage: $0 filename" exit 1 fi

使用合理的评论

提供解释代码的注释,特别是当代码很复杂的时候,但不要解释明显的行,而是解释您正在使用的每一个命令,否则重要的代码会在混合中丢失。

^$ Username: /etc/passwd if [$?! = 0);然后返回"No such user: $username" exit 1 fi

当出现问题时,使用返回代码退出

即使您不认为您会查看它们,当出现问题时返回一个非零的返回代码也是一个好主意。有一天,您可能想要一种简单的方法来检查脚本中的错误,返回代码1、4或11可能会帮助您非常快速地找出问题所在。

“你是哪一年出生的?”> " read year if [$year -gt ' date +%Y ']; / /读取年份然后回答“对不起,这是不可能的。”退出2 fi

使用函数而不是重复命令组

函数还可以使代码更具可读性和可维护性。如果您重复使用的只是一个命令,那么不要麻烦,但是如果分离几个集中的命令很容易,那么这个麻烦是值得的。如果你以后要做出改变,你只需要在一个地方做出改变。

低()函数{当地str =“$ @”输出输出= $ (tr [a - z]的[a - z]的< < < " $ {str} ") echo $输出}

为变量指定有意义的名称

Unix管理员通常会竭尽全力避免输入一些额外的字符,但是不要在脚本中这样做。多花点时间给变量取有意义的名称,并在命名中使用一些一致性。

#!/bin/bash if [$# != 1]; /bin/bash然后echo "Usage: $0 address" exit 1 else ip=$1 fi

检查参数的类型是否正确

如果在开始使用脚本之前检查提供给脚本的参数的类型,可以为您节省很多麻烦。这里有一个简单的方法来检查参数是否为数字。

如果!["$1" -eq "$1" 2> /dev/null] then echo "ERROR: $1 is not a number!

检查缺少的参数或提供的参数顺序错误

别以为他知道自己在做什么。如果他应该提供一个以上的参数,确保他提供了。

If[$# != 3]; / /使用实例然后回应“三个论点中哪一部分你不明白?

检查所需文件是否实际存在

在尝试使用文件之前,检查文件是否存在是很容易的。下面是一个简单的检查,以查看第一个参数是否实际上是系统上的一个文件。

如果[!- f $ 1];然后echo "$1——no such file" fi

发送输出到/dev/null

将命令输出发送到/dev/null,并以一种更“友好”的方式告诉用户哪里出错了,这可以让需要运行脚本的人更容易地运行您的脚本。

如果[$1 == "help"];else CMD= ' which $1 >/dev/null 2>&1 ' if [$?! = 0);然后echo "$1: No such command——maybe拼写错误或不在您的搜索路径上" exit 2 else cmd= ' basename $1 ' whatis $cmd fi fi

利用错误代码

您可以在脚本中使用返回代码来确定一个命令是否得到了预期的结果。

$username 2> /dev/null if [$?= = 0);然后回显"processes:" >> /home/oldaccts/$username ps -U $username >> /home/oldaccts/$username fi

提供反馈

不要忘记告诉运行您的脚本的人他们需要知道的内容。他们不应该通过读取您的代码来提醒您在哪里为他们创建了一个文件——特别是如果该文件不在当前目录中。

...date >> /tmp/report$$ echo "您的报告是/tmp/report$$"

引用所有参数展开

如果在脚本中使用扩展字符,不要忘记使用引号,这样就不会得到与预期不同的结果。

#!/bin/bash msg="小心将你的文件命名为*.txt" # this will expand *.txt echo $msg # this will not echo "$msg"

引用所有参数时使用$@

$@变量列出了提供给脚本的所有参数,它很容易使用,正如我们在这个脚本摘录中看到的那样。

#!/bin/bash for I in "$@" do echo "$ I " done

一些额外的注意和一致性可能意味着您今天编写的脚本在今后几年仍然很容易使用。

加入网络世界社区有个足球雷竞技app脸谱网LinkedIn对自己最关心的话题发表评论。

版权所有©2014 IDG ComRaybet2munications, Inc.

SD-WAN买家指南:向供应商(和您自己)提出的关键问题