Shell脚本编程-分支与循环
一、条件判断式
1. 判断文件是否存在:[ -e pathname]
2. 判断文件类型
2.1 文件是否是目录:[ -d pathname ]
2.2 文件是否是普通文件:[ -f pathname ]
2.3 文件是否是符号链接:[ -L pahname ]
3. 判断文件的权限
3.1 文件是否具有可读权限: [ -r pathname ]
3.2 文件是否具有可写权限:[ -w pathname ]
3.3 文件是否具有可执行权限:[ -x pathname ]
4. 文件的最后修改时间比较
4.1 文件较另一个文件新:[ pathname1 -nt pathname2 ]
4.2 文件较另一个文件旧:[ pathname1 -ot pathname2 ]
5. 判断字符串长度
5.1 判断字符串长度为零:[ -z string ]
5.2 判断字符串长度非零:[ -n string ]
6. 字符串相等比较
6.1 判断字符串是否相等:[ string1 = string2 ]
6.2 判断字符串是否不相等:[ string1 != string2 ]
如果string与string2的字符串不相等,则判断式为真,否则为假。7. 算术比较
7.1 等于:[ num1 -eq num2 ]
7.2 不等于: [ num1 -ne num2 ]
7.3 小于:[ num1 -lt num2 ]
7.4 小于或等于:[ num1 -le num2 ]
7.5 大于:[ num1 -gt num2 ]
7.5 大于或等于:[ num1 -ge num2 ]
二、分支结构
1.if 分支结构
1.1 简单的if分支
if[ 判断式 ];then
......
fi
1.2 if-else分支。
if[ 判断式 ];then
......
else
......
fi
1.3 if-else-if分支
if[ 判断式 ];then
......
elif
......
else
......
fi
2. 逻辑短路分支
2.1 判断式 && 命令
当前面的判断式为真,后面的命令就会被执行,前面的判断式为假,则命令不会被执行。
例如:test 4 -gt 3 && echo TRUE
2.2 判断式 || 命令
当前面的判断式为真,后面的命令不会被执行,前面的判断式为假,则执行后面的命令。
3. test分支
[ 判断式 ];命令
当判断式为真,则执行后面的命令,否则不执行。例如:[ 4 -gt 3 ];echo TRUE
4. case分支
case 字符串 in
模式1)command;;
模式2)command;;
....
esac
模式可以是字符串也可以是正则表达式,可以将多个模式用 | 隔开,表示都匹配。注意,在每个命令后面有两个分号。
三、循环结构
1. for循环
for 容器变量 in 列表
do
......
done
从列表中,每次取得一项赋值给容器变量,然后进入do处理循环。
2. while循环
while [ 判断式 ]
do
......
done
判断式为真,则继续执行do中的内容,为假则结束循环。
3. until [ 判断式 ]
do
......
done
until正好与while相反。当判断式为假则继续执行do的内容,为真则结束循环。
4. 跳出机制
4.1. exit [n]
exit后面可以带一个数字表示退出码。exit会停止shell程序的执行,并将返回值设置为n。
4.2. break [n]
中止循环,并跳到下一个命令,N表示跳出嵌套的层数。
4.3. continue [n]
停止循环过程的当前一个反复并且跳到循环中的下一个反复过程的开始部分,n表示忽略的层数。