Day3
一、Bash自动化脚本基础
在编写bash脚本时,需要注意一下几个点:
变量
- 变量的定义: 在定义变量时,建议用大写来表示,因为小写可能会和Linux命令冲突;其次是定义是等号两边不能有空格。
- 变量的引用: 在引用变量时,变量名要放在”${}”内,且要加上英文双引号,尤其是在执行系统命令是引用变量,最好加上双引号,这样可以防止变量有空格或者特殊字符。
- $var,${var},”${var}”三者的区别:$var和${var}类似,区别在于是否需要明确变量边界,且${var}的用法比$var更加丰富; “${var}”当变量值包含空格、特殊字符或不确定是否包含时(比如用户输入、文件路径等),可以保留变量中的特殊字符,比如通配符。
if条件判断
- 基本格式: if [[ -属性 “${变量}” ]]; then fi / if [[ “${变量}” -属性 “${变量}”]]; then elif fi.
- 两个中括号的作用是,在判断是可以在里面做复杂判断,如正则,逻辑与,逻辑或等判断
- 内层中括号和属性变量要有空格隔开

for循环
- 基本格式: for 参数 in “${变量}” ; do done
- 需要注意的是,for循环里面调用参数可以不用向之前那样麻烦,只需要$参数就可以了

while循环
- 基本格式: while [$变量 -属性 值]; do done.
- 在while循环中,要避免陷入死循环,一定要添加推出循环的条件

函数
- 基本格式: fun_name(){…}.
- 函数变量的定义: var_name=$1,var_name2=$2 …,变量的定义一定要从$1开始,五个变量就是$1到$5
- 函数的调用,可以在sh文件内部直接给变量赋值,也可以在外部调用时动态赋值,需注意的是,在外部赋值时需要让系统先解析到函数,在调用才可以,例: 第一步: source fun.sh, 第二步: fun_name “aaaa” “aaaa”
脚本中的比对符号
eq == ,ne != ,gt >, lt < ,ge >=, le <=
二、空格问题需注意
- $(date’+%Y-%m-%d %H:%M:%S’), 在这段脚本代码中,如果执行,会报错,因为date与单引号之间没有空格
- !systemctl start nginx, 这段也会报错,因为感叹号和命令之间没有空格
- find / -name “*.txt” -exec rm -f{}\; 这段代码内rm -f命令与大括号之间要有空格,大括号和反斜杠也要有空格,否则执行不成功
一定要注意,运算符或者其他符号和命令之间的空格!!!
三、标准Bash模块
| 变量 | 含义 | 实例输出 | 常见用途 |
|---|---|---|---|
| $0 | 当前脚本的文件名 | ./deploy.sh | 获取脚本名(用于日志或提示) |
| $1~$9 | 第1~9个位置参数(变量),第10个开始就是${10},以此类推 | $1 -> nginx | 获取命令行传入的参数 |
| $# | 获取传入参数的个数 | 3 | 判断参数数量是否正确 |
| $* | 所有参数作为一个整体字符串 | "a b c" | 以单字符串形式获取所有参数 |
| $@ | 所有参数分别展开 | "a" "b" "c" | 遍历参数 |
| $? | 获取上一条命令的退出状态码/执行码 | 0/1 | 判断命令是否执行成功 |
| $$ | 当前shell进程的pid | 14532 | 用于生成临时文件名 |
| $! | 最后一个进程pid | 6721 | 监控后台任务 |
| $- | 当前shell启动是的选项标志 | himBH | 调试或环境检查 |
| $_ | 上一条命令的最后一个参数 | file.txt | 快捷引用 |
| $PWD | 获取当前工作目录 | /root/bashs/ | 显示当前目录 |
| $OLDPWD | 上一个目录 | /root/ | 返回上一次目录(cd -) |
| $HOME | 当前家目录 | /home/lcj | 用户相关操作 |
| $USER | 当前登录用户名 | root | 日志、权限检查 |
| $HOSTNAME | 主机名 | lcj | 日志、系统信息输出 |
| $RANDOM | 生成随机数(0~32767) | 347 | 生成随机字符串,文件名 |
| $LINENO | 当前脚本执行的行号 | 20 | 调试脚本时查看位置 |
| $SECONDS | 脚本运行秒数 | 120 | 统计执行耗时 |
| $FUNCNAME | 当前函数名称 | main | 在函数内输出自身名字 |
| $BASH_SOURCE | 当前脚本文件路径 | /root/bashs/ | 区分被source的脚本 |
| $BASH_VERSION | bash版本号 | 5.2.15(1)-release | 检查兼容性 |
| $PATH | 系统可执行路径 | /usr/local/bin:/usr/bin | 环境变量配置 |
| $PS1 | 交互式提示符变量 | [\u@\h \W]\$ | 定义命令行提示符 |
| IFS | 字符分隔符 | 空格、制表符、换行符 | 控制字符串分割行为 |






