Linux:高效编写shell脚本的10个建议

转载地址: https://mp.weixin.qq.com/s/YmROxFBkfMxuh_VaaI4wtg

 

【Linux命令】 linux下高效编写shell脚本的10个建议

 

在Linux环境下工作 ,shell脚本的编写应该是一个必备的基本技能了,本文将分享 10 个写出高效可靠的 shell脚本的实用技巧

本文主要内容来源于《10 Useful Tips for Writing Effective Bash Scripts in Linux》,再加上自己的一点理解而成。如果你还有一些其他更好的脚本编程经验想要分享,在下面评论框分享出来吧。

 

 

1

在脚本中多写注释

这条建议不但适合于shell脚本,对于其它编程语言同样实用。这样做的好处是可以帮助他人或者你自己后面阅读脚本时能够迅速了解脚本的功能,便于维护。试想下,如果有一天你的主管给了你一堆没有注释的代码,你是不是很抓狂呢。

shell脚本中,注释一般以#开头,后面跟着是注释的内容。注释不可少,但是注释也不是越多越好,对于shell脚本,注释一般包括下面几个部分:

 

1 #脚本的参数
2 #脚本的用途
3 #脚本的注意事项
4 #脚本的写作时间,作者,版权等
5 #各个函数前的说明注释6 #一些较复杂的单行命令注释

 

 

2

脚本中有命令运行失败时退出脚本

如果脚本中某条命令运行失败,我们不应该让其继续运行,因为这样可能会影响脚本的其余部分,导致逻辑错误。逻辑错误一般又是很难定位的,与其这样,不如让其提前结束更早的找出脚本中的错误。可以用下面的命令设置在遇到命令失败时来退出脚本执行:

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

# 或
set -e

 

 

3

脚本中使用到未声明变量时退出脚本

脚本中使用到未声明的变量同样可能导致逻辑错误,可以用下面的命令设置脚本在使用到未声明的变量时退出执行:

# 若有用未设置的变量即让脚本退出执行
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

 

 

 

5

在脚本中多使用函数

同样,这条建议也适用其它编程语言,函数的使用使得代码更模块化,更可读和可重用;shell脚本中定义函数的语法如下所示:

function check_root()

   command1;     
   command2;
}

# 或
check_root()
{    
   command1;     
   command2;
}

 

 

6

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

为什么会有这个建议,原文并没有给出详细的说明,只是简单的提了句: == 是 = 的同义词,因此仅用个单个 = 来做字符串比较。不过在原文的后面有网友回答了,是因为==只适用于bash;POSIX形式是“=”,使用 = 更方便移植。

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

 

 

7

用$(command) 代替传统的`command`

这两种形式都可以用作命令替换,所谓命令替换是用这个命令的输出结果取代命令本身。这里建议用 $(command) 而不是反引号 `command `来做命令代换。

 

//不建议做法
user=`echo "$UID"`

建议做法user=
$(echo "$UID")

 

8

用readonly声明静态变量

静态变量不会改变;它的值一旦在脚本中定义后就不能被修改,对于这类变量,在声明的时候应该用readonly去声明。

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

 

9

命名规范

由于在bash环境变量名字都是大写,因此建议自己定义的变量用小写字母命名,以防止命名冲突,同时命名时要做到顾名思义,你取的名字要有意义。

#而环境变量用大写命名,自定义变量用小写,
nikto_file="$HOME/Downloads/nikto-master"

 

10

对比较长的脚本进行调试

当你的脚本有成千上万行时,一旦脚本运行出错,排错是一件异常困难的事情;为了在脚本执行前更轻松地将问题定位出,需要进行一些调试,下面是一些指南来帮助你掌握调试的技巧。

How To Enable Shell Script Debugging Mode in Linux

How to Perform Syntax Checking Debugging Mode in Shell Scripts

How to Trace Execution of Commands in Shell Script with Shell Tracing

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh   符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。   当编辑好脚本时,如果要执行该脚本,还必须使其可执行。   要使脚本可执行: 编译 chmod +x filename 这样才能用./filename 来运行 1.1.2 注释   在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。   如果您使用了注释,那么即使相当长的时间内没有使用脚本,您也能在很短的时间内明白该脚本的作用及工作原理。 1.1.3 变量   在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写: #!/bin/sh #对变量赋值: a="hello world" # 现在打印变量a的内容: echo "A is:" echo $a 有时候变量名很容易与其他文字混淆,比如: num=2 echo "this is the $numnd" 这并不会打印出"this is the 2nd",而仅仅打印"this is the ",因为shell会去搜索变量numnd的值,但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量: 网管u家u.bitsCN.com num=2 echo "this is the ${num}nd"   这将打印: this is the 2nd 1.1.4 环境变量 由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论,因为通常情况下仅仅在登录脚本使用环境变量。 1.1.5 Shell命令和流程控制 在shell脚本中可以使用三类命令
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值