Shell开发规范

指定脚本解释器

  1. #!/bin/bas#!/bin/sh
  2. #!/usr/bin/env bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH

1和2的区别见以下2篇文章。大致意思是,第二种方式是自己去$PATH下找bash

  1. Why is it better to use “#!/usr/bin/env NAME” instead of “#!/path/to/NAME” as my shebang?
  2. What is the difference between “#!/usr/bin/env bash” and “#!/usr/bin/bash”?

声明版本信息

#开头代表注释

1
2
3
# Version:
# Description:
# Author:

声明变量

  1. 全局变量全部大写中间用”_”连接,类似蟒蛇命名法
  2. 定义变量
    • 格式:变量名称=值,例如:var=1
    • 如果变量前后都有字符,则${var},防止歧义
    • 如果变量是字符串,则"${var}"
    • 如果变量是整性,则$var

声明函数

1和2都可以,两种方式等价

  1. function f {}
  2. f() {}

单中括号[]和双中括号[[]]

双中括号是bash的语法,[[]]比[]更通用,所以建议优先使用[[]]。另外两者内的语法有些不一样,例如:&&、||、<、>只能在[[]] 中使用,如果使用[[]],则表示方式为[[ $var != 1 ]],如果使用[],则表示方式为[ $var -ne 1 ],[[]] 内的语法更贴近其他编程语言的习惯。需要注意的是,两者内两边都需要加空格,书写时请不要吝啬你的空格键。