课时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
小结