一、exit
exit用于直接退出shell脚本程序并返回状态码(状态码可在执行命令执行后用$?查看)
如果不在exit后添加状态码,会默认返回最后一条命令执行后的状态码
exit 加状态码,代表退出程序并向系统指定状态码
状态码 | 含义 |
---|---|
0 | 执行成功 |
非0 | 不同程度的错误 |
2 | 用法不当 |
126 | 不是可执行的 |
127 | 命令未找到 |
[root@localhost1 ~]#vim test.sh
#!/bin/bash
for ((i=1;i<=5;i++))
do
echo 外循环:$i
for ((j=1;j<=5;j++))
do
if [ $j -eq 3 ];then
exit #j=3时exit,不指定状态码(指定状态码为多少,最后查看则是多少)
fi
echo -e '\t'内循环1:$j
done
done
[root@localhost1 ~]#bash test.sh
外循环:1
内循环1:1
内循环1:2 #这里直接退出了脚本程序,脚本后面的命令便不会再执行
[root@localhost1 ~]#echo $? #查看状态码,返回的是脚本最后一个命令执行结果(执行成功)
0
二、break
break用于想在某种条件出现的时候终止循环而不是等到循环条件为false才终止。
break用于跳出一个循环体或者完全结束一个循环,不仅可以结束其所在的循环,还可结束其外层循环。
break默认为跳出当前一层循环,如果需要跳出多层,在break后加上n(如跳出两层,使用 break 2)
注意
只能在循环体内和switch语句体内使用break。
不管是哪种循环,一旦在循环体中遇到break,将结束当前循环,开始执行此循环体以外的代码。
当break出现在循环体中的switch语句体内时,起作用只是跳出该switch语句体,并不能终止循环体的执行。若想强行终止循环体的执行,可以在循环体中,但并不在switch语句中设置break语句,满足某种条件则跳出本层循环体。
[root@localhost1 ~]#vim test.sh
for ((i=1;i<=3;i++))
do
echo 外循环:$i
for ((j=1;j<=5;j++))
do
if [ $j -eq 3 ];then #当j=3时break
break
fi
echo -e '\t'内循环1:$j
done
done
[root@localhost1 ~]#bash test.sh
外循环:1
内循环1:1
内循环1:2 #可以看到j=3时跳出当前循环体,直接执行了外循环
外循环:2
内循环1:1
内循环1:2
外循环:3
内循环1:1
内循环1:2
三、continue
continue用于想在某种条件出现的时候终止本次循环但不影响此循环体之后的循环。
continue和break有点类似,区别在于continue只是终止本次循环,接着还执行后面的循环,break则完全终止循环。 可以理解为continue是跳过当次循环中剩下的语句,执行下一次循环。
continue默认为终止当前一层循环,但继续执行循环后的语句,如果需要终止多层,在continue后加上n(如跳出两层,使用 continue 2)
注意
continue 在用于while循环时,需要尤其注意指定迭代的位置,否则容易出现卡死循环,一般不建议在while循环中使用break
[root@localhost1 ~]#vim test.shfor ((i=1;i<=5;i++))
for ((i=1;i<=3;i++))
do
echo 外循环:$i
for ((j=1;j<=5;j++))
do
if [ $j -eq 3 ];then #当j等于3时continue
continue
fi
echo -e '\t'内循环1:$j
done
done
[root@localhost1 ~]#bash test.sh
外循环:1
内循环1:1
内循环1:2 #可以看到每次内循环j=3时终止了本次循环,但不影响当前循环体之后的循环
内循环1:4
内循环1:5
外循环:2
内循环1:1
内循环1:2
内循环1:4
内循环1:5
外循环:3
内循环1:1
内循环1:2
内循环1:4
内循环1:5