1、判断的类型
- 算术判断
- 字符串判断
- 逻辑判断
- shell内置判断
2、算术判断
- [ 2 -eq 2 ]相等 ([]两边都要用空格隔开)
- [ 2 -nq 2 ]不等
- [ 3 -gt 1 ]大于
- [ 3 -ge 2 ]大于等于
- [ 3 -lt 1 ]小于
- [ 3 -le 2 ]小于等于
- (())也可以表示算术比较,((10>=9)),((10==10))
3、字符串比较
- [ string1 = stirng2 ] 如果两个字符串相等,则结果为真
- [ string1 != stirng2 ] 如果两个字符串不相等,则结果为真
- [ - n"$var"] 如果字符串不为空,则结果为真
- [ - z"$var" ] 如果字符串为空,则结果为真
- [[ "xxxx"==x* ]]表达式中表示0或者多个字符
- [[ xxx==x?? ]] 在表达式中表示单个字符
- 在引用变量的时候要加上双引号,否则当变量没有定义当时候会报错
4、内置判断
- -e file,如果文件存在,则结果为真
- -d file 如果文件为一个子目录,则结果为真
- -f file,如果文件是一个普通的文件,则结果为真
- -r file,如果文件可读,则结果为真
- -w file,如果文件可写,则结果为真
- -x file,如果文件可执行,则结果为真
- -s file,如果文件长度不为零,则结果为真
[[]] 是[]的扩展语法,在老得sh里面并不支持,推荐用[]
5、逻辑控制
- 条件 if
- 分支case
- 循环 for while until select
- Break continue
- 较常用的为 if for while
6、if结构
- if [ condiition ];then...; fi
- if [ condiition ];then...;else...; fi
- if [ condiition ];then...;elif...; fi
- 简单的逻辑可以使用&&|| 去替代
- 条件可以用命令返回值代替
7、for循环
- for((c1;c2;c3))
- do
- ...;
- done
- for((i=0;i<10;i++)); do echo $i ;done 所有被do执行的命令,最后都会被打印出来
8、for遍历循环
- 用于递归数组,还可以递归以空格隔开的字符串序列,或者某个命令的返回值
- for f in array[*];
- do
- ...
- done
- ss="aa bb cc dd" ; for x in $ss; do echo $x; done;
- for x in `ls`; do echo $x; done
- ss=(aa bb cc "ss ee"); for x in "${ss[@]}"; do echo $x; done;
9、while循环
- i=0 while[ $i -lt 3]; do echo $i;((i=i+1));done
- 一个有用的小技巧,一行行的读取文件内容 while read line; do echo $line; done < /tmp/tmp 注意:/tmp/tmp为文件名
10、退出控制
- return函数返回
- exit脚本推出
- break退出当前循环
- continue跳过当前的循环,进入下一次的循环