bash脚本编程思想和条件测试
数据类型
- 字符型
- 数值型
算术运算
1
+,-,*,/,**
- let VAR=expression
- VAR=$[expression]
- VAR=$((expression))
- VAR=$(expr argu1 argu2)
增强型赋值
+=,-=,*=,/=,%=- ``` <:是否小于1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
- 要用let 描述, let i+=#
- let VAR++
- 条件测试
- 判断需求是否满足,需要由测试机制来实现
- 如何编写测试表达式以实现所需测试
- 执行命令,并利用命令状态返回值来判断
- 0成功
- 1失败
- 测试表达式
- test expression
- [ expression ]必须有空格
- [[ expression ]]----关键字
- 数值测试:数值比较
- -eq : 是否等于 $num1 -eq $num2
- -ne : 不等于
- -gt :是否大于
- -ge : 是否大于等于
- -lt:是否小于
- -le: 是否小于等于
- 字符串设置:
- ==:等值比较符号
- ```
>:是否大于,外边尽可能使用双括号- -z"string":判断指定的字符串是否为空,空则为真 - -n"string":判断是否不为空。空为假 - =~:左侧能否被右边的pattern匹配,匹配左边的一部分字符 - Notes:和变量比两边加“ ”,防止空字符串1
2
3
- ```
!= 是否不等于文件测试
- -a 或-e FILE,[-e FILE],是否存在
- -b,是否存在且为块设备
- -c,是否存在且为 字符设备文件
- -d,目录文件
- -f ,普通文件
- -h ,符号连接文件
- -p 命名管道文件
- -S,套接字文件
- 权限测试
- -r,是否存在并且当前用户可读
- -w,可写
- -x,可执行
- 特殊权限测试
- -g,存在并且拥有suld权限
- -u,是否存在且拥有sgld权限
- -k,sticky权限
- 内容测试
- -s,是否为空,空为假
- 时间戳测试
- -N,上次读取后是否被修改过
- 从属关系测试
- -Q,当前文件是否是文件的属主
- -G,当前用户胡是否为文件的属组
- 双目测试
- FILE1-ef FILE2 , FILE2和FILE2是否指向统一文件系统的相同Inode的硬链接
- FILE1 -nt FILE2,FILE1是否新与FILE 2
- FILE1 -ot FILE2,FILE1是否旧与FILE 2
- 逻辑运算
- && || !
- [ EXPRESSION -a EXPRESSION ] 并且
- [ expression -o expression ]
脚本的状态返回值:最后执行的命令的返回值
- 自定义状态返回值,exit[n],n自定义,返回n。shell遇到exit[n]立马终止