shell编程学习基础第四篇

循环语句

for 循环

for 循环有2种形式:
1、 for-in 语句
2、 for (( variable assignment ; condition ; iteration process ))

for in

for var in list
do
 	command
done

list 代表要循环的值,在每次循环的时候,会把当前的值赋给var变量,这样在循环体中就可以直接通过 $var 获取当前的值了。

#!/bin/bash
for num in 1 2 3 4 5 6
do
	echo $num
done
#输出
#1
#2
#3
#4
#5
#6

以上会根据空格将1 2 3 4 5 6分割,然后依次输出出来

#!/bin/bash
for num in 1,2,3,4,5,6
do
	echo $num
done
#输出
#1,2,3,4,5,6

使用 “,” 分割不行。
造成这样的结果是因为:for in 循环默认是循环一组通过空格 或者 制表符 或者换行(Enter 键) 分割的,是由系统环境变量 IFS定义的。当然,既然是由环境变量定义的,那当然也就能修改。

修改 IFS 变量,改变for in 循环的 list 格式

#!/bin/bash
#定义一个变量oldIFS保存未修改前的IFS的值
oldIFS=$IFS
#修改IFS值,以逗号为分隔符
IFS=$','
list=1,2,3,4,5
list2="1 2 3 4 5"
for var in $list
do
 echo $var
done
for var2 in $list2
do
 echo $var2
done
#还原IFS的值
IFS=$oldIFS

#输出
#1
#2
#3
#4
#5
#1 2 3 4 5

C语言风格的for循环
使用(())来遍历循环
for (( variable assignment ; condition ; iteration process ))

#!/bin/bash
for (( i=1; i<=5; i++ ))
do
	echo i= $i
done
#输出
#i= 1
#i= 2
#i= 3
#i= 4
#i= 5

while 循环

while test command
do
	other commands
done

与 if else 语句一样,后面接 test 命令,如果 test 后面的命令的退出状态码为 0,那么就进入循环体,执行do后面的逻辑。

#!/bin/bash
flag=10
while test $flag -gt 5
do
 echo $flag
 # 如果没有这句,那么flag的值一直为10,就会无限循环执行
 flag=$[$flag - 1]
done

主要,test 的替换还有 [ command opr command ] 和 (( command opr command ))。

#!/bin/bash
flag=10
while [ $flag -gt 5 ]  
do
 echo $flag
 # 如果没有这句,那么flag的值一直为10,就会无限循环执行
 flag=$[$flag - 1]
done
#输出
#10
#9
#8
#7
#6

注意,[ $flag -gt 5 ] 中的 [空格…空格] 要留空格

#!/bin/bash
flag=10
while (($flag >= 5))
do
 echo $flag
 # 如果没有这句,那么flag的值一直为10,就会无限循环执行
 flag=$[$flag - 1]
done
#输出
#10
#9
#8
#7
#6
#5

注意,使用 (()) 运算不能要使用日常的运算符 ,如 大于用 (>) ,不能使用 gt 等。

until循环语句

until语句与 while语句更好相反,while 语句是在test命令退出状态为 0 的时候执行循环,而until语句是在test命令退出状态码不为0的时候执行。

#!/bin/bash
flag=1
until (($flag > 5))
do
 echo flag=$flag
 flag=$[ $flag + 1 ]
done
#输出
#flag=1
#flag=2
#flag=3
#flag=4
#flag=5

break
break 用于退出当前循环。

#!/bin/bash
for (( flag=0; flag <= 5; flag++ ))
do
 if (( $flag == 3 ))
 then
 break
 fi
 echo flag=$flag
done
#输出
#flag=0
#flag=1
#flag=2

continue
continue表示终止当前的一次循环,进入下一次循环,注意,continue后面的语句不会执行。

#!/bin/bash
for (( flag=0; flag <= 5; flag++ ))
do
 if (( $flag == 3 ))
 then
 continue
 fi
 echo flag=$flag
done
#输出
#flag=0
#flag=1
#flag=2
#flag=4
#flag=5
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值