<Linux>流程控制——循环(for/while/until/select)

一、for循环(foreach型)语法

for var in list
#每一次循环,依次把列表list中的一个值赋给循环变量
do		#循环体开始标志
	cmd		#循环变量每取一次值,循环体就执行一次
done	#循环体结束标志,返回循环顶部

说明

  • 首先list可以是命令替换变量名替换字符串文件名列表(可包含通配符),每个列表项以空格间隔
  • for循环执行的次数取决于列表list中单词的个数
  • 可以省略in list,此时默认值为in $@

举例
例1 比较参数在不在引号中

#!bin/bash

for x in centos ubuntu gentoo opensuse
do
        echo $x
done

for x in "centos ubuntu gentoo opensuse"
do
        echo $x
done

for x in centos ubuntu gentoo opensuse,这里是4个参数

for x in "centos ubuntu gentoo opensuse",而这个只有一个参数,就是"centos ubuntu gentoo opensuse"

运行结果

在这里插入图片描述

例2 比较变量是否在引号中

#!bin/bash

i=1; weekdays="Mon Tue Wed Thu Fri"
for day in $weekdays
do
        echo "weekday $((i++)) : $day"
done

echo -e "\n"
j=1
for day in "$weekdays"
do
        echo "weekday $((j++)) : $day"
done

运行结果

在这里插入图片描述

若把变量放在引号中,则直接作为一个整体,将整体作为一个参数

例3 实现将当前目录下所有以.c 为后缀的文件改写为以.sh为后缀的文件

#!bin/bash

for file in *.c
do
        rename .c .sh $file
done

执行该shell程序前,当前目录下的文件为
在这里插入图片描述

执行后
在这里插入图片描述


break和continue

break [n]
  • 用于强制退出当前循环
  • 如果是嵌套循环,则break命令后面可以跟着一个数字n,表示退出第n重循环(最里面那层为第一层循环)

 continue [n]
  • 用于忽略本次循环的剩余部分,回到循环开始位置,进入下一次循环
  • 如果是嵌套循环,可以在continue后面加一个数字n,表示回到第n重循环的顶部

举例
例1

#!bin/bash

list="1 2 3 4 5 6 7 8 9 10"
res=0
for i in $list
do
        if [ $res -le 30 ]
        then
                (( res =$res +  $i ))
        else
                break
        fi
done

echo "res= $res"

这里是让res的值超过30就跳出循环,需要注意的是,进行求和时,整个表达式是在(())里面的,而不是res = (( $res + $i ))

运行结果为

res=36

二、for循环(C语言型)语法

for ((expr1;expr2;expr3))    #执行expr1
do							#若expr2的值为真,则进入循环体
	cmd1					#执行循环体,执行结束后执行expr3
done						#循环结束,返回循环顶部

说明

(1)通常expr1和epxr3是算数表达式,expr2的逻辑表达式
(2)expr1仅仅在循环开始初执行一次
(3)expr2每次循环开始前都需要判断条件是否为真
(4)expr3在每次执行循环结束后执行一次

举例 实现求和功能(用户输入大于1的数,求从1到输入数的和)

#!bin/bash

read -p "Input a number: " num
res=0

for((i=0;(( i<=$num ));(i++)))
do
        ((res =  $res + i))
done


echo "sum= $res"

运行结果

在这里插入图片描述

三、while循环语句

语法

while expr         #执行expr
do                 
	cmd
done

举例 实现求和功能(用户输入大于1的数,求从1到输入数的和)

#!bin/bash

read -p "Input a num: " num
res=0
i=0
while (( i<=num  ))
do
        (( res=res+i   ))
        (( i++ ))
done

echo "sum=$res"

运行结果
在这里插入图片描述

四、until循环语句

语法

util expr   #expr非0,则进入循环
do
	cmd
done

举例 实现求和功能(用户输入大于1的数,求从1到输入数的和)

#!bin/bash

read -p "Input a num: " num
res=0
i=0
until (( i>num  ))
do
        (( res=res+i   ))
        (( i++ ))
done

echo "sum=$res"

运行结果

在这里插入图片描述

whileuntil的区别在于

  • while想要执行其循环体,则while的条件expr得为
  • until想要执行其循环体,则until的条件expr得为

五、select

#!/bin/bash
## filename: select-1.sh

PS3="What is your preferred scripting language? "
select s in bash perl python ruby quit
do
case $s in
bash|perl|python|ruby) echo "You selected $s" ;;
quit) break ;;
*) echo "You selected error , retry …" ;;
esac
done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值