【从0到1 Shell】(六)循环结构

步进循环语句for

1.带列表的 f o r for for循环语句

基本语法:

for variable in {list}
do 
	statement1
	statement2
	..
done

例1:使用带列表的 f o r for for语句

#! /bin/bash

for var in 1 2 3 4 5 6 7 8
do
	echo "the number is $var"
done

执行结果:
在这里插入图片描述
可以将上述代码进行改造,得到同样的效果:

#! /bin/bash

for var in {1..8}
do
	echo "the number is $var"
done

例2:指定 f o r for for语句的步长
基本语法:

for variable in {start..end..step}
do
	statement1
	statement2
	..
done

使用该语法:

#! /bin/bash

sum=0;
for i in {1..100..2}
do
	let "sum+=i"
done
echo "the sum is $sum"

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

例3:使用 l s ls ls命令的输出结果作为 f o r for for循环的执行条件

#! /bin/bash

#${ls}可换成*,代表ls *
for file in $(ls)
do
	echo "$file"
done

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

例4:使用 f o r for for循环逐个处理脚本的参数

#! /bin/bash

echo "$*"
for arg in $*
do
	echo "${arg}"
done

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

2.不带列表的for循环语句

基本语法:

for variable
do
	statement1
	statement2
	..
done

例5:使用不带列表的 f o r for for循环语句

#! /bin/bash

for arg
do
	echo "$arg"
done

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

3.类C风格的for循环语句

基本语法:

for ((expression1;expression2;expression3))
do
	statement1
	statement2
	..
done

例6:使用上述语法

#! /bin/bash

for (( i=1; i<5; i++))
do
	echo "$i"
done

执行结果:
在这里插入图片描述
省略条件的死循环:

for ((;;))
4.使用for循环语句处理数组

基本语法:

for variable in ${array[*]}
do
	statement1
	statement2
	..
done

例7:处理数组

#! /bin/bash

array=(Monday Tuesday Wednesday Thursday Friday Saturday Sunday)
for day in ${array[*]}
do
	echo $day
done

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

until循环语句

1.until语句的基本语法
until expression
do
	statement1
	statement2
	..
done

e x p r e s s i o n expression expression表达式的值不为0时,将执行 d o do do d o n e done done之间的语句;当 e x p r e s s i o n expression expression表达式的值为0时,将退出 u n t i l until until循环结构,继续执行 d o n e done done语句后面的其它语句

例8:使用 u n t i l until until语句

#! /bin/bash

i=1
#当i的值小于9时执行循环
#注意此处两个中括号不能分隔
until [[ "$i" -gt 9 ]]
do
	let "square=i*i"
	echo "$i*$i=$square"
	let "i=i+1"
done

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

2.利用until语句批量增加用户

例9:批量增加用户

#! /bin/bash

i=1
until [ "$i" -eq 21 ]
do
	#执行useradd命令添加用户
	useradd user$i
	#修改用户密码
	echo "password" | passwd --stdin user$i > /dev/null
	#ubuntu下更改成echo "user$i":"password" | chpasswd
	let "i++"
done

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

例10:批量删除用户:

#! /bin/bash

i=1 
until [ "$i" -eq 21 ]
do
	userdel -r user$i
	let "i++"
done

while循环语句

1.while语句的基本语法

基本语法:

while expression
do
	statement1
	statement2
	..
done

e x p r e s s i o n expression expression表达式的值为0时,执行循环内的语句;否则退出 w h i l e while while循环

例11:使用 w h i l e while while循环来输出数字1~9的平方

#! /bin/bash

i=1
while [ "$i" -lt 10 ]
do
	let "square=i*i"
	echo "$i*$i=$square"
	let "i=i+1"
done

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

通过break语句跳出指定的层数

例12:给 b r e a k break break一个参数使其跳出指定的层数

#! /bin/bash

for (( i=1; i<=9; i++ ))
do
	for (( j=1; j<=i; j++ ))
	do
		let "product=i*j"
		printf "$i*$j=$product"
		if [[ "product" -gt 9 ]]
		then
			printf "    ”
		else
			printf "     "
		fi
		if [[ "$j" -eq 5 ]]
		then
			break 2
		fi
	done
	echo
done

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

乘法表的最后一行与命令提示符位于同一行,这是因为满足 j = 5 j=5 j=5后执行 b r e a k break break语句,跳过两行【跳过 e c h o echo echo】,因此同行

含参数的continue语句

例13:使用含参数的 c o n t i n u e continue continue语句

#! /bin/bash

for i in a b c d
do
	echo -n "$i "
	for j in `seq 10`
	do
		if [ $j -eq 5 ]
		then
			continue 2
		fi
		echo -n "$j"
	done
	echo
done

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

当内层循环到第5次时,变量 j j j的值为5,执行 c o n t i n u e continue continue 2语句,跳过外层的 e c h o echo echo

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值