shell脚本编程之循环与跳转语句

931 阅读1分钟

引言

在实际工作中,经常会遇到某项任务需要多次执行的情况,而每次执行时仅仅是处理的对象不一样,其他命令相同。当面对各种列表重复任务时,if语句已经难以满足要求,本篇文章将和大家介绍循环语句的使用。

循环含义

将某代码段重复运行多次,通常有进入循环的条件和退出循环的条件 确定循环次数

  • 循环次数事先已知
  • 循环次数事先未知

1、For 循环

使用for循环语句时,需要指定一个变量及可能的取值列表,针对每一个不同的取值重复执行相同的命令序列,直到变量值用完退出循环。

语法结构:

执行机制:
依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环
结束
如果省略 [in WORDS ... ] ,此时使用位置参数变量 in "$@"

1、for 变量名 in 取值列表
   do
     命令序列
   done

2、for (( 表达式1; 表达式2; 表达式3 ))
   do
     命令序列
   done

1.jpg

示例:

4.jpg

5.jpg

2、while、until 循环

对于要求控制循环次数、操作对象按数字顺序编号、按特定条件执行重复操作等情况,更适合使用while、until 语句

相对于for,需要知道循环次数

我们只知道停止条件,不知道次数,就需要使用while 直到达到条件

while 条件测试操作
do
  命令序列
done
当条件语句判断为假时停止


until 条件测试操作
do
  命令序列
done
当条件语句判断为真时停止

2.jpg

3.jpg

示例:

6.jpg

7.jpg

8.jpg

9.jpg

3、多重循环

多个循环语句嵌套使用。外层循环每执行一次,内层循环都要全部执行完毕后,下一次外层循环才能再执行,内层循环,可看作外层循环的一个命令语句。

10.jpg

11.jpg

4、跳转语句

4.1、break 语句

跳出单层循环,break 2 跳出2层循环,循环内break后面的语句不会执行,但是循环外的语句仍然会执行


[root@localhost ~]#cat break.sh 
#!/bin/bash
for i in {1..10}
do
  if [ $i -eq 5 ];then 
  break
  fi
  echo i=$i
done



[root@localhost ~]#cat break.sh 
#!/bin/bash
for i in {1..10}
do
  if [ $i -eq 5 ];then
    break 2
  fi
  echo i=$i
done

4.2、continue 语句

终止某次循环的执行,但不会完全终止整个循环 ,while until 循环中使用需要慎重!因为如果continue放在变量迭代语句前面会造成死循环

[root@localhost ~]#cat continue.sh 
#!/bin/bash
for i in {1..10}
do
  if [ $i -eq 5 ];then
    continue 
  fi
  echo i=$i
done


[root@localhost ~]#cat continue.sh 
#!/bin/bash
for i in {1..10}
do
  if [ $i -eq 5 ];then
    continue 2
  fi
  echo i=$i
done

4.3、exit 语句

退出shell脚本进程,exit执行后,脚本后面所有的语句都不会执行

#!/bin/bash
#用户输入密码,脚本判断密码是否正确,正确密码为123456,输入正确提示正确信息,连续输错3次则报警
mm="123456"
dang=0
chi=2
while true
do
dang=$[dang+1]
read -p "请输入密码" m
  if [ $mm == $m ]
then
  echo "密码正确"
exit
  elif [ $dang -le $chi ]
then
  echo "密码错误"
else
  echo "你已经输错了 $dang 次,请明天再试"
exit
fi
done