所有shell脚本,最好以.sh格式结尾方便区分文件

注释

  1. 明确规定使用的shell解释器
  2. 说明 作者、编写时间、脚本功能、特别注意
  3. 变量名集中存放,方便修改。变量名不可与命令冲突,例如ip
  4. 引入环境变量、运行主函数脚本
  5. 函数。多使用函数的方式编写脚本,易读易修改
  6. 调用函数
  1. #!/bin/bash
  2. ################
  3. # author: cola QQ:1431075018
  4. # date: 2021-09-15
  5. # function: Automated operation and maintenance
  6. # notice: Only support centos7
  7. ################
  8. listen='127.0.0.1'
  9. port='54321'
  10. username='cola'
  11. password=$(openssl rand -base64 12)
  12. export PATH=$PATH:/usr/local/bin:/usr/local/sbin
  13. source /etc/profile
  14. install(){
  15. if [ -z "$1" ] ;then
  16. echo $1
  17. fi
  18. }
  19. install mysql

最小权限

尽管root操作非常方便,但是我们需要小心谨慎的操作

应该避免使用UID=0的超级权限用户执行脚本,如果你需要较高权限的访问请使用 sudo

判断循环

请将 ; do , ; thenwhile , for , if 放在同一行

非管道命令,使用 $? 或直接通过一个 if 语句来检查以保持其简洁

  1. if [ -z "$1" ] ;then
  2. echo $1
  3. fi

case代码规范

  1. case $1 in
  2. a)
  3. aflag='true'
  4. ;;
  5. b)
  6. bflag='true'
  7. ;;
  8. esac

简洁的case代码

  1. case "${flag}" in
  2. a) aflag='true' ;;
  3. b) bflag='true' ;;
  4. f) files="${OPTARG}" ;;
  5. v) verbose='true' ;;
  6. *) error "Unexpected option ${flag}" ;;

变量

调用变量 使用 ${var} 而不是 $var

  1. echo var:${var} var2:${var1}

使用 $(command) 而不是反引号。使用 反引号 会有 歧义的作用。

嵌套的反引号要求用反斜杠转义内部的反引号。而 $(command) 形式嵌套时不需要改变,而且更易于阅读。

运行脚本

不要给脚本授权+x权限,尽量使用bash命令调用脚本

当脚本有x权限,意味着终端输入文件路径就可以执行,很多时候在复制文件时粘贴上去就直接执行了

所以用户权限要最小化,我建议在设计脚本时

  1. 要么只允许特定用户执行脚本
  2. 尽量不使用root用户登录终端,防止误操作

/Users/lofty/library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/

~/library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9/8398fe9d189dffc26ca0ab2dd422975a/Message/MessageTemp

/Users/lofty/library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/


瓦雀