您的位置:首页 > 运维架构 > Shell

[笔记]shell脚本中的流程控制

2015-12-29 15:23 621 查看
流程控制:
选择:if,cace
循环:for,while,until
select:条件测试完后根据测试结果决定"选择"或"循环"

命令结束状态变量$?值为0时执行成功,非0失败

if条件判断基本语法:
#1.if-then基本格式
if 条件测试;then   #只有条件测试为真(0)才会继续
命令区域
fi

#2.if-then-else基本格式
if 条件测试;then   #条件测试为真执行命令区域1,否则执行2
命令区域1
else
命令区域2
fi

#3.if完整格式
if 条件测试1;then
命令区域1
elif 条件测试2;then
命令区域2
else
命令区域3
fi

#注意:
#    if ,then在同一行时需用分号隔开
#    elif可以有多行而else只能有一行
#    条件测试可以有多种形式,单个命令或管道等
#    测试部分为管道时选取最后一个命令的返回值为条件测试真假值
#    使用!可以对返回值取反,但!与命令间必须有空格隔开


复合判断:
((算式)) :算式运算结果只有不为0时返回真值0,不必理会特殊字符
[[ 判断式 ]] :注意空格,不用理会特殊字符
test 判断式 :注意特殊符号的转义
[ 判断式 ] :同test,且需注意空格
-a -o 进行 且,或 逻辑组合判断
COMMAND1&& COMMAND2 :逻辑AND,COMMAND1执行成功才执行COMMAND2,COMMAND2成功返回真值0
COMMAND1|| COMMAND2 :逻辑OR,COMMAND1执行不成功才执行COMMAND2,任一个则成功返回真值0
注意:[[ 判断式 ]]中若使用"==""!="且这两个运算符右方的字符串单引号或双引号添加与否导致的结果不同
判断式中字符串与判断符之间的空格

算式判断:
int1 -eq int2 两数相等为真
int1 -ne int2 两数不等为真
int1 -gt int2 int1大于int2为真
int1 -ge int2 int1大于等于int2为真
int1 -lt int2 int1小于int2为真
int1 -le int2 int1小于等于int2为真

文件判断:
-a file 文件存在为真
-b file 文件为块特殊文件为真
-c file 文件为字符特殊文件为真
-d file 目录存在为真
-e file 文件存在为真
-f file 文件为正规文件为真
-g file 文件存在且设置了set group id属性
-h file 符号链接文件
-p file 管道文件
-s file 文件大小大于0
-r file 可读为真
-w file 可写为真
-x file 可执行为真
-O file 文件为有效的使用者所拥有
-G file 文件为有效的组所拥有
-N file 文件存在且自上次读取后曾修改过
file1 -nt file2 文件1比文件2新,或文件1存在但文件2不存在
file1 -ot file2 文件1比文件2旧,或文件2存在但文件1不存在
file1 -ef file2 文件1和文件2参考到相同的设备或inode号

case条件判断基本语法:
case 待测项 in
样式1) 命令区域1;;
样式2) 命令区域2;;
....
*) 命令区域;;
esac

#注意:
#    待测项符合某一样式则执行对应命令区域
#    命令区域可由单行或多行指令组成,但最后一行指令后须以;;结尾
#    样式*)通常发在最后区域以捕捉其他所有非指定样式


for循环基本语法:

for 变量 in 串行
do
命令区域
done
#注:
#串行可以是变量或是字符串的组合[彼此间用$IFS所定义的分隔符(默认空格)隔开]
#    还可使用"for ((起始条件;终止条件;变化值))"类似C的用法
#    for ((;1;)) 可做无穷循环,Ctrl-c终止循环


while循环基本语法:
while 条件测试
do
命令区域
done
# 注:while ((1)) 或 while [1] 或 while true 可做无穷循环
##注意:while中条件测试返回值为真才进入下方循环!!!!


until循环基本语法:
until 条件测试
do
命令区域
done
##注意:until中条件测试返回值为假才进入下方循环!!!!


select命令基本语法:
select 选项变量 in 串行
do
命令区域
done
#注:具体用法待补充(-_-)


break与continue:
在for, while, until, select中若想要提前结束循环,可在循环中使用break N [N为跳出的循环层数,N值大于等于1,为1时可以省略]
在for, while, until, select中使用continue会跳过本次循环,重新开始执行下一个循环

^_^

本文出自 “junight” 博客,请务必保留此出处http://junight.blog.51cto.com/10828785/1729553
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: