Shell之循环语句

本文介绍了Linuxshell脚本中的循环结构,包括for循环(固定次数与遍历列表),while和until循环(基于条件判断),以及双重循环和跳出循环的控制语句(break和continue)。通过示例展示了如何在bash脚本中进行循环计算、打印模式和实现特定逻辑。
摘要由CSDN通过智能技术生成

循环是什么?

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

重复运行次数

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

常见的循环的命令:for, while, until

for循环

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

for 已知循环次数

for  tlj(变量)   循环次数(取值列表)

do
需要循环的事件


done

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

for ((expr1;expr2;expr3))
do
       command
done

expr1:定义变量并赋初值
expr2:决定是否循环
expr3:决定循环变量如何改变,决定循环什么时候退出

实例:

[root@localhost ~]# for i in {1..10}
> do
> echo $i
> done
1
2
3
4
5
6
7
8
9
10

[root@localhost ~]# for i in `seq 10`; do echo "hello world"; done
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world


1加到10
[root@localhost ~]# for i in `seq 10`; do sum=$[ $i+ $sum ];done
[root@localhost ~]# ./qiuhe.sh
求和结果是1
求和结果是3
求和结果是6
求和结果是10
求和结果是15
求和结果是21
求和结果是28
求和结果是36
求和结果是45
求和结果是55
[root@localhost ~]# seq -s+ 100|bc
5050
[root@localhost ~]# seq -s+ 1 2 10|bc
25
[root@localhost ~]# seq -s+ 1 2 100|bc
2500

奇偶数
[root@localhost ~]# for i in {1..10..2}
#奇数,从1开始隔两个数
> do
> echo $i
> done
1
3
5
7
9
[root@localhost ~]# for i in `seq 0 2 10`; do echo $i; done
0
2
4
6
8
10
[root@localhost ~]# for ((i=1; i<=10; i+=2))
> do
> echo $i
> done
1
3
5
7
9
for ((i=0;i<=10;i++))
do
sum=$[i+sum]
done
echo $sum

打印一行

#!/bin/bash
for i  in {1..9}
do
echo -e " * "
done

在这里插入图片描述

打印正方形

#!/bin/bash
for j in {1..9}
do
for i  in {1..9}
do
echo -e " * \c"
#\c换行
done
echo
#换行
done


#
#!/bin/bash
for j in {1..9}
    do
       for i in `seq $j`
    do
	 echo -e "${i}x${j}=$[i*j] \t\c"
	 #\t tab键可以对齐
    done
	echo
done

在这里插入图片描述

倒序99乘法表

#!/bin/bash
for j in {1..9}
do
for i in `seq $[10-$j]`
do
echo -ne " ${i}x`echo $[10-j]`=$[(10 -j)*i]\t"
done
echo
done


#!/bin/bash
for j in {9..1..-1}
do
for i in `seq $[10-$j]`
do
echo -ne " ${i}x`echo $[10-j]`=$[(10 -j)*i]\t"
done
echo
done

在这里插入图片描述

$RANDOM 取值范围:0-32767

[root@test1 ~]# echo $[$RANDOM%50]
37
[root@test1 ~]# echo $[$RANDOM%20]
15

while 和 until

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

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

直到达到条件

while
当命令判断为假时停止

until
当命令判断为真时停止

######求和###########
#!/bin/bash
i=0
sum=0
while [ $i -le 100 ]
do
let sum+=$i
let i+=2
done
echo $sum


#!/bin/bash
i=1
sum=0
while [ $i -le 100 ]
do
let sum+=$i
let i+=2
done
echo $sum

#!/bin/bash
i=0
sum=0
for  i in {1..100}
do
let sum+=$i
done
echo $sum

for ((i=0,sum=0;i<=100;i++))
do
let sum+=$i
done
echo $sum

i=0
sum=0
while [ $i -le 100 ]
do
let sum+=$i
let i++
done
echo $sum


i=0
sum=0
until [ $i -gt 100 ]
do
let sum+=$i
let i++
done
echo $sum

###############批量建立用户##################################
#!/bin/bash
i=0
while [ "${i}" -le 20 ]
do
useradd stu${i}
echo "123456" |passwd --stdin stu${i} &>/dev/null
if [ $? -eq 0 ]
then
echo "用户 stu${i} 被建立"
else
echo "用户 stu${i} 建立失败"
fi
let i++
done


##############猜价格游戏##########################
#!/bin/bash
p=`echo $[RANDOM%1000+1]`
t=0

while true
do
read -p "请输入商品的价格1-1000:" num
let t++
if [ $num -eq $p ]
then
echo "恭喜你猜中了,实际价格是$p"
echo "您一共猜了${t}次"
exit 0
elif [ $num -gt $p ]
then
echo "您猜的价格高了" 
else
echo "您猜的价格低了"
fi
done



#!/bin/bash
i=0
sum=0
until [ $i -gt 100 ] 
do
let sum+=$i
let i++
done
echo $sum

双重循环及跳出循环

  • break跳出单个循环后面加数字2则代表跳出两层循环
  • 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 ~]# bash continue.sh
i=1
i=2
i=3
i=4
i=6
i=7
i=8
i=9
i=10

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值