专栏首页顶级程序员Linux中高效编写Bash脚本的10个技巧

Linux中高效编写Bash脚本的10个技巧

Linux开源社区(微信号:cn_linux) 英文:Aaron Kili,翻译:Linux中国/ch-cn 链接:linux.cn/article-8618-1.html

Shell 脚本编程 是你在 Linux 下学习或练习编程的最简单的方式。尤其对 系统管理员要处理着自动化任务,且要开发新的简单的实用程序或工具等(这里只是仅举几例)更是必备技能。

本文中,我们将分享 10 个写出高效可靠的 bash 脚本的实用技巧,它们包括:

1、 脚本中多写注释

这是不仅可应用于 shell 脚本程序中,也可用在其他所有类型的编程中的一种推荐做法。在脚本中作注释能帮你或别人翻阅你的脚本时了解脚本的不同部分所做的工作。

对于刚入门的人来说,注释用 # 号来定义。

# TecMint 是浏览各类 Linux 文章的最佳站点

2、 当运行失败时使脚本退出

有时即使某些命令运行失败,bash 可能继续去执行脚本,这样就影响到脚本的其余部分(会最终导致逻辑错误)。用下面的行的方式在遇到命令失败时来退出脚本执行:

# 如果命令运行失败让脚本退出执行 set -o errexit # 或 set -e

3、 当 Bash 用未声明变量时使脚本退出

Bash 也可能会使用能导致起逻辑错误的未声明的变量。因此用下面行的方式去通知 bash 当它尝试去用一个未声明变量时就退出脚本执行:

# 若有用未设置的变量即让脚本退出执行 set -o nounset # 或 set -u

4、 使用双引号来引用变量

当引用时(使用一个变量的值)用双引号有助于防止由于空格导致单词分割开和由于识别和扩展了通配符而导致的不必要匹配。

看看下面的例子:

#!/bin/bash # 若命令失败让脚本退出 set -o errexit # 若未设置的变量被使用让脚本退出 set -o nounset echo "Names without double quotes" echo names="Tecmint 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; } # 或 check_root(){ command1; command2; }

写成单行代码时,每个命令后要用终止符号:

check_root(){ command1; command2; }

6、 字符串比较时用 = 而不是 ==

注意 == 是 = 的同义词,因此仅用个单 = 来做字符串比较,例如:

value1=”tecmint.com” value2=”fossmint.com” if [ "$value1" = "$value2" ]

7、 用 $(command) 而不是老旧的 command 来做代换

命令代换 是用这个命令的输出结果取代命令本身。用 $(command) 而不是引号 command 来做命令代换。

这种做法也是 shellcheck tool (可针对 shell 脚本显示警告和建议)所建议的。例如:

user=`echo “$UID”` user=$(echo “$UID”)

8、 用 readonly 来声明静态变量

静态变量不会改变;它的值一旦在脚本中定义后不能被修改:

readonly passwd_file=”/etc/passwd” readonly group_file=”/etc/group”

9、 环境变量用大写字母命名,而自定义变量用小写

所有的 bash 环境变量用大写字母去命名,因此用小写字母来命名你的自定义变量以避免变量名冲突:

# 定义自定义变量用小写,而环境变量用大写 nikto_file=”$HOME/Downloads/nikto-master/program/nikto.pl” perl “$nikto_file” -h “$1”

10、 总是对长脚本进行调试

如果你在写有数千行代码的 bash 脚本,排错可能变成噩梦。为了在脚本执行前易于修正一些错误,要进行一些调试。通过阅读下面给出的指南来掌握此技巧:

1、如何在 Linux 中启用 Shell 脚本调试模式(https://linux.cn/article-8028-1.html)

2、如何在 Shell 脚本中执行语法检查调试模式(https://linux.cn/article-8045-1.html)

3、如何在 Shell 脚本中跟踪调试命令的执行(https://linux.cn/article-8120-1.html)

本文到这就结束了,你是否有一些其他更好的 bash 脚本编程经验想要分享?若是的话,在下面评论框分享出来吧。

—————END—————

看完本文有意思?请分享给更多人

本文分享自微信公众号 - 顶级程序员(TopCoding)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-08-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 把握未来先机,2017全球人工智能技术大会胜利闭幕

    齐聚一堂 见证最具影响力大会   谁能定义下一个时代?当2017年的全国两会政府工作报告中首次提到人工智能的时候,答案呼之欲出。被誉为下一股技术浪潮的人工智...

    顶级程序员
  • 哪些人工智能电影演得最逼真?

    在 1982 年的电影《银翼杀手》的开幕镜头中,一个调查员不断向询问一名为 Leon 的机器人,旨在激发他的情绪反应。在电影中,同情心是区分人类与人工智能(A...

    顶级程序员
  • 互联网协议入门

    一、概述 1.1 五层模型 互联网的实现,分成好几层。每一层都有自己的功能,就像建筑物一样,每一层都靠下一层支持。 用户接触到的,只是最上面的一层,根本没有感觉...

    顶级程序员
  • 4399AT测试工具脚本,执行,报告功能概览

    本章主要分为三部分介绍4399ATUI自动化测试工具,分别从脚本,脚本命令执行,结束后报告的展示;

    厦门-安仔
  • 编程高手为啥都喜欢耍脚本?

    脚本编程几乎在每一个平台上都存在,这是因为利用脚本常常会简化、加快很多批量处理的工作,它能实现很多传统编程语言的功能,但是对编写者却不需要关心什么编译器、解释器...

    程序员互动联盟
  • Linux 中高效编写 Bash 脚本的 10 个技巧

    Shell 脚本编程是你在 Linux 下学习或练习编程的最简单的方式。尤其对系统管理员要处理着自动化任务,且要开发新的简单的实用程序或工具等(这里只是仅举几例...

    阿dai学长
  • Chrome 浏览器扩展神器油猴

    我平常工作最常用的浏览器就是 Chrome 了,Google 出品,值得信赖,用 Chrome 就不得不提浏览器扩展了,有了各种 Chrome 扩展,可以让你浏...

    苏生不惑
  • Python之元组

    py3study
  • 变量类型-Tuple

    教程: 一:元组的创建     元组(tuple)与列表类似,不同之处在于元组的元素不能修改     (1)tuple写在圆括号之间,元素用逗号隔开    ...

    py3study
  • 华为的Dynamic Tag Manager

    是的,华为也出了一个Tag Manager Tools,标签管理工具,之前提到的说某家大厂正在开发Tag Manager产品就是指华为。

    GA小站

扫码关注云+社区

领取腾讯云代金券