所有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/sbin
source /etc/profile
install(){
if [ -z "$1" ] ;then
echo $1
fi
}
install mysql
最小权限
尽管root操作非常方便,但是我们需要小心谨慎的操作
应该避免使用UID=0的超级权限用户执行脚本,如果你需要较高权限的访问请使用 sudo
判断循环
请将 ; do
, ; then
和 while
, for
, if
放在同一行
非管道命令,使用 $? 或直接通过一个 if 语句来检查以保持其简洁
if [ -z "$1" ] ;then
echo $1
fi
case代码规范
case $1 in
a)
aflag='true'
;;
b)
bflag='true'
;;
esac
简洁的case代码
case "${flag}" in
a) 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/