所有shell脚本,最好以.sh格式结尾方便区分文件
注释
- 明确规定使用的shell解释器
- 说明 作者、编写时间、脚本功能、特别注意
- 变量名集中存放,方便修改。变量名不可与命令冲突,例如ip
- 引入环境变量、运行主函数脚本
- 函数。多使用函数的方式编写脚本,易读易修改
- 调用函数
#!/bin/bash################# author: cola QQ:1431075018# date: 2021-09-15# function: Automated operation and maintenance# notice: Only support centos7################listen='127.0.0.1'port='54321'username='cola'password=$(openssl rand -base64 12)export PATH=$PATH:/usr/local/bin:/usr/local/sbinsource /etc/profileinstall(){if [ -z "$1" ] ;thenecho $1fi}install mysql
最小权限
尽管root操作非常方便,但是我们需要小心谨慎的操作
应该避免使用UID=0的超级权限用户执行脚本,如果你需要较高权限的访问请使用 sudo
判断循环
请将 ; do , ; then 和 while , for , if 放在同一行
非管道命令,使用 $? 或直接通过一个 if 语句来检查以保持其简洁
if [ -z "$1" ] ;thenecho $1fi
case代码规范
case $1 ina)aflag='true';;b)bflag='true';;esac
简洁的case代码
case "${flag}" ina) aflag='true' ;;b) bflag='true' ;;f) files="${OPTARG}" ;;v) verbose='true' ;;*) error "Unexpected option ${flag}" ;;
变量
调用变量 使用 ${var} 而不是 $var
echo var:${var} var2:${var1}
使用 $(command) 而不是反引号。使用 反引号 会有 歧义的作用。
嵌套的反引号要求用反斜杠转义内部的反引号。而 $(command) 形式嵌套时不需要改变,而且更易于阅读。
运行脚本
不要给脚本授权+x权限,尽量使用bash命令调用脚本
当脚本有x权限,意味着终端输入文件路径就可以执行,很多时候在复制文件时粘贴上去就直接执行了
所以用户权限要最小化,我建议在设计脚本时
- 要么只允许特定用户执行脚本
- 尽量不使用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/
