bash中的特殊字符
-
注释
- ; 分号作为命令行的分隔符
- ;; case终止符
- . 等价于source
- " 和 ' 双引号部分引用,单引号全引用
- , 连接一系列的算术操作
- \ 转义符
- / 文件路径分隔符
- ` 命令替换
- : 空命令等价于NOP
- ! 取反操作
- 作为文件名匹配
- ? 测试操作符
- {} 是参数替换,@是位置参数,$? 是退出状态码变量,$$是进程id变量,保存所在脚本的进程 ID
- () 组命令,作为一个子shell来运行
- {} 代码块,匿名函数
- [] 条件测试
- [[]] 测试表达式在括号内
- & 后台命
- && 与逻辑操作
- || 或操作
- | 管道操作
- 选项前缀
- = 等号赋值操作
- 加号
- % 取模
- ~ home目录
- ~+当前工作目录,$PWD
- ~- $OLDPWD
- ^ 行首
重定向
bash中的变量
- 变量赋值
- =
- let a=8+3
- read -p "input a num: " n
- 命令替换赋值
- $(var)
- 变量类型
- 整型
- 字符串
- 局部变量只在代码块或者函数中可见
- 环境变量将影响用户接口和shell行为
- 位置参数
- $0 脚本自身名称
- $1 第一个参数
- {10}
- @ 都表示所有的位置参数
- shift命令会重新分配位置参数,所有参数左移一个位置
- 变量替换 变量的名字就是变量保存值的地方,引用变量的值就叫做变量替换\
bash条件判断
- if/then结构用来判断命令列表的退出状态码是否为0
- [[ ... ]]扩展测试命令 [[ b ]]
- 条件判断主要判断的是条件是否为真或者假
- test、/usr/bin/test、[ ]和/usr/bin/[都是等价命令
if [ condition1 ]
then
command1
command2
command3
elif [ condition2 ]
# 与else if一样
then
command4
command5
else
default-command
fi
使用[[ ... ]]条件判断结构而不是[ ... ],能够防止脚本中的许多逻辑错误
-
测试操作符
-e 文件存在
-a 文件存在
-f 文件存在,一般文件
-s 文件大小不为0
-d 一个目录
-b 块设备
-c 字符设备,键盘/声卡等
-p 管道
-h 符号链接
-L 符号链接
-S socket
-t 文件描述符关联到一个终端设备上
-r 文件可读
-w 文件可写
-x 文件可执行
-g 标记了sgid
-u 标记了suid
-k 设置了sticky位
-O 判断是否是文件owner
-G 文件gid是否和你相同
-nt 新
-ot 旧
-ef 相同文件的硬链接
! 反转测试结果
-
二元比较操作符:
- -eq
- -ne
- -gt
- -ge
- -lt
- -le if [ "b" ]
(("b"))
- -a if [ "exp2" ]
- -o
-
字符串比较:
- = if [ "b" ]
- ==
- !=
- -z 为null
- -n 不为null