专栏名称: Linux爱好者
伯乐在线旗下账号,「Linux爱好者」专注分享 Linux/Unix 相关内容,包括:工具资源、使用技巧、课程书籍等。
目录
相关文章推荐
Linux就该这么学  ·  printf 打印输出时 \ n 和 \r 的区别 ·  22 小时前  
Linux就该这么学  ·  熬夜修网成常态?开源网络运维助手来拯救你 ·  昨天  
Linux就该这么学  ·  某运维修不好 “ 打印机 ” ... ·  昨天  
Linux就该这么学  ·  福利福利!3本签名版合集来啦! ·  昨天  
Linux就该这么学  ·  开源装机工具 Ventoy 更新 ... ·  2 天前  
51好读  ›  专栏  ›  Linux爱好者

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

Linux爱好者  · 公众号  · linux  · 2017-06-26 20:54

正文

(点击 上方公众号 ,可快速关注)


英文: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 )







请到「今天看啥」查看全文