当前位置: 首页 > article >正文

课时69:流程控制_for循环_for (())案例

2.4.3 for (())案例

学习目标

这一节,我们从 基础知识、循环案例、小结 三个方面来学习。

基础实践

简介

for循环的语法中,它还支持一种包含赋值+循环双功能的语法,也就是双小括号(()),这种语法的语法格式如下:
	样式1: 单元素样式
		for (( i=0; i<10; i++ ))
	样式2: 多元素样式
		for (( i=0,j=0; i<10; i++,j++ ))
功能解读
	1 第一部分定制一个包含初始值的变量名
	2 第二部分定制循环的结束条件
	3 第三部分定制循环过程中的变量变化效果
		- 为了让循环出现结束
注意事项:
	1 变量的复制可以包含空格
	2 条件中的变量不能用$符号
	3 第三部分的数据操作过程不用 expr格式

实践1-(())简单使用

输出1-5的数字
[root@localhost ~]# for ((i=1;i<=5;i++));do echo $i;done
1
2
3
4
5

输出1-10中的所有奇数
[root@localhost ~]# for ((i=1;i<=10;i+=2));do echo $i;done
1
3
5
7
9

输出1-10中的所有偶数
[root@localhost ~]# for ((i=2;i<=10;i+=2));do echo $i;done
2
4
6
8
10

实践2-100个数字的求和

查看脚本内容
[root@localhost ~]# cat for_odd_num.sh
#!/bin/bash
# 功能:for统计数据之和

# 定制普通变量
all_sum=0
odd_sum=0

# 定制所有数据求和逻辑
for ((i=1;i<=100;i++))
do
  let all_sum+=i
done

# 定制所有奇数求和逻辑
for ((i=1;i<=100;i+=2))
do
  let odd_sum+=i
done

# 信息输出
echo -e "\e[31m所有数据之和: ${all_sum}\e[0m"
echo -e "\e[31m所有奇数之和: ${odd_sum}\e[0m"

脚本执行后效果
[root@localhost ~]# /bin/bash for_odd_sum.sh
所有数据之和: 5050
所有奇数之和: 2500

循环案例

实践1-命令行进度条数字

[root@localhost ~]# for ((i = 0; i<=100; ++i)); do printf "\e[4D%3d%%" $i;sleep 0.1s; done
 27%
... ...
[root@localhost ~]# for ((i = 0; i<=100; ++i)); do printf "\e[4D%3d%%" $i;sleep 0.1s; done
 99%

命令解读:
	%3d%% 指的是 3个数字位置 + 1个%位置,共计4个位置
	防止信息输出的叠加,采用\e[4D,每次输出信息的时候,光标左移4个位置,信息不会出现叠加
	
\e[3D 的演示
[root@localhost ~]# for ((i = 0; i <= 100; ++i)); do printf "\e[2D%3d%%" $i;sleep 0.1s; done
                     1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 56 5 5 5 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9100%[root@localhost ~]#

实践2-脚本生成进度条

查看文件内容
[root@localhost ~]# cat progress_bar_for.sh
#!/bin/bash
# 定制简单的进度条

# 定制进度条的进度符号
str="#"
# 定制进度转动提示符号,注意\\转义
arr=("|" "/" "-" "\\")

# 定制进度条循环控制
for ((i=0; i<=50; i++))
do
    # 设定数组信息的变化索引
    let index=i%4
    # 打印信息,格式:【%s进度符号】【%d进度数字】【%c进度进行中】
    # 注意:信息的显示宽度和进度的数字应该适配,否则终端显示不全
    printf "[%-50s][%d%%]%c\r" "$str" "$(($i*2))" "${arr[$index]}"
    # 进度的频率
    sleep 0.2
    # 进度符前进
    str+="#"
done
printf "\n"
脚本执行效果
[root@localhost ~]# /bin/bash progress_bar_for.sh
[###################################################][100%]-

实践2-生成10个随机数保存于数组中,并找出其最大值和最小值

查看脚本内容
[root@localhost ~]# cat compare_nums_for.sh
#!/bin/bash
# 设定随机数比大小

# 设定基本变量
declare -i min max
declare -a nums

# 设定大小比较
for ((i=0;i<10;i++))
do
    # 将随机数添加到数组中
    nums[$i]=$RANDOM
    # 设定初始值
    [ $i -eq 0 ] && min=${nums[0]} max=${nums[0]}
    # 设定最大值
    [ ${nums[$i]} > $max ] && max=${nums[$i]}
    # 设定最小值
    [ ${nums[$i]} < $min ] && min=${nums[$i]}
done
echo -e "\e[31m    随机数的统计信息\e[0m"
echo "------------------------------"
echo -e "\e[32m所有的随机数:${nums[@]}"
echo -e "最大的随机数:${max}"
echo -e "最小的随机数:${min}\e[0m"
脚本执行效果
[root@localhost ~]# /bin/bash compare_num_for.sh.sh
    随机数的统计信息
------------------------------
所有的随机数:32506 31542 6495 11273 8532 5789 22139 25904 16252 7357
最大的随机数:7357
最小的随机数:32506

小结



http://www.kler.cn/a/274536.html

相关文章:

  • python面试篇-多并发详解(多线程,多进程,协成整理)---一篇搞定
  • 机器学习基础算法 (二)-逻辑回归
  • 内核执行时动态的vmlinux的反汇编解析方法及static_branch_likely机制
  • BenchmarkSQL使用教程
  • 有监督学习 vs 无监督学习:机器学习的两大支柱
  • 开放词汇目标检测(Open-Vocabulary Object Detection, OVOD)综述
  • 10 Internet基本服务(3)
  • VMware的安装和Ubuntu的配置安装
  • 奥特曼剧透GPT-5,将在高级推理功能上实现重大进步
  • Java-Java基础学习(2)-网络编程-TCP-UDP
  • Spring Boot 自动化单元测试类的编写过程
  • LeetCode 热题100 图论专题解析
  • C#,图论与图算法,有向图(Graph)之环(Cycle)判断的颜色算法与源代码
  • WiFi是可以连接网络,但是在Pixel 手机上就连接提示受阻,无法上网-解决方法
  • 大数据面试题 —— HBase
  • [LLM] 大模型基础|预训练|有监督微调SFT | 推理
  • node.js 的常用命令
  • SLAM 求解IPC算法
  • SQL的INSERT IGNORE用法
  • .NET 异步编程(异步方法、异步委托、CancellationToken、WhenAll、yield)
  • 图像分割在疾病诊断中的应用案例
  • 无法加载DLL“SQLite.Interop.dll“:找不到指定模块
  • Linux作业
  • 键盘映射工具KeyTweak的使用,把F9和F10改为 Home、End
  • [PwnThyBytes 2019]Baby_SQL
  • Golang 开发实战day05 - Loops(1)