Shell编程语法
18600
画布
|大纲
内容详情
书写规范
文件头
- Shebang
- #!/bin/bash
- 指定解释器
- #!/bin/bash
命名规则
- 脚本名
- 小写+下划线
- 见名知意
- 小写+下划线
- 变量名
- 全大写
- 如
- 全大写
执行方式
直接运行
- bash script.sh
赋权运行
- chmod +x script.sh && ./script.sh
子Shell
- sh -x script.sh
- 开启调试模式
变量
概念
- 键值对存储
- 内存临时数据
生命周期
- 临时变量
- 当前Shell会话
- 永久变量
- 写入
定义方式
- 字符串
- NAME="value"
- 数字
- COUNT=10
- 命令结果
- 反引号
- $()
- 推荐,可嵌套
- 文件路径
- LOG=/var/log/app.log
引号区别
- 单引号
- 原样输出
- 双引号
- 解析变量与转义
位置变量
$0
- 脚本名称
$n
- 第n个参数
$#
- 参数个数
与
- 所有参数
- 整体字符串
- 独立字符串
$?
- 上条命令退出码
- 0成功
$$
- 当前脚本PID
$!
- 最后一个后台进程PID
$_
- 上一个命令的最后一个参数
传参方式
直接传参
- sh test.sh a b c
赋值传参
- PARAM=$1
交互式
- read -p "Input:" VAR
变量子串
截取
- ${VAR:start:length}
长度
- ${#VAR}
删除
- 从前删
- ${VAR#pattern}
- 从后删
- ${VAR%pattern}
数值运算
整数
- expr
- expr $a + $b
- $(())
- echo $((a+b))
- $[]
- echo $[a*b]
- let
- let sum=a+b
小数
- bc
- echo "scale=2;10/3"|bc
- awk
- awk 'BEGIN{print 10/3}'
自定义返回
- return N
- 函数退出码
条件表达式
文件判断
- 存在
- 普通文件
- 目录
字符串
- 相等
- 不等
- 长度为0
数字比较
- 等于
- 大于
- 小于
正则
- [[ $str =~ ^[0-9]+$ ]]
流程控制
if
- 单分支
- if []; then ... fi
- 多分支
- if-elif-else
case
- 多选匹配
- case $var in pattern) ... ;; esac
- 禁用Ctrl+C:
- case $var in pattern) ... ;; esac
for
- 列表循环
- for i in {1..10}; do ... done
while
- 条件循环
- while read line; do ... done < file
循环控制
- break
- 跳出当前循环
- continue
- 跳过本次迭代
- exit
- 终止脚本
函数
定义
- function fname() { ... }
传参
- 位置参数
- $1,$2...
变量作用域
- 关键字
- 限制函数内
返回值
- return
- 0-255整数
- echo
- 返回字符串
expect
自动交互
- ,
案例
- 批量SSH免密
- 循环
数组
普通数组
- 索引数字
- ARR=(a b c)
关联数组
- 字符串键
- declare -A ARR
