2.4.4 嵌套循环
学习目标
这一节,我们从 基础知识、简单实践、小结 三个方面来学习。
基础知识
简介
这里的嵌套实践,与选择语句的嵌套实践基本一致,只不过组合的方式发生了一些变化。常见的组合样式如下:
for嵌套for语句for 循环列表1dofor 循环列表2do...donedone
for嵌套if|case语句for 循环列表doif 条件判断语句或case 条件判断语句done
if语句嵌套for语句if 条件判断thenfor 循环列表语句ficase语句嵌套for语句 case 条件判断for 循环列表语句;;esac
简单实践
for嵌套for语句实践1-输出99乘法表
查看脚本内容
[root@localhost ~]# cat for_nine_table.sh
#!/bin/bash
# 功能:for打印99乘法表# 定制打印99乘法表的业务逻辑
# 对第一个位置的数字进行循环
for num1 in {1..9}
do# 对第二个位置的数字进行循环for num2 in $(seq $num1)do# 信息输出,\t\c 的目的是删除后续信息,生成的内容是固定长度echo -e "\e[$[RANDOM%9+31]m${num1} x ${num2} = $[num1*num2]\e[0m\t\c"doneecho # 一个子循环一行内容
done脚本执行效果
for嵌套if语句实践2-判断目录中的文件类型
准备工作
mkdir dir/{server,soft,scripts,logs} -p
touch dir/{{a..c}.sh,{1..3}.txt}
查看脚本内容
[root@localhost ~]# cat file_type_for_if.sh
#!/bin/bash
# 功能:for嵌套if查看目录下的文件类型# 定制普通变量
dir_name='dir'# 获取所有文件列表
for file in $(ls dir)
do# 判断文件类型if [ -d ${dir_name}/${file} ]thenecho -e "\e[31m${dir_name}/${file} 是一个目录文件\e[0m"elif [ -f ${dir_name}/${file} ]thenecho -e "\e[31m${dir_name}/${file} 是一个普通文件\e[0m"fi
done
脚本执行效果
[root@localhost ~]# /bin/bash file_type_for_if.sh
dir/1.txt 是一个普通文件
dir/2.txt 是一个普通文件
dir/3.txt 是一个普通文件
dir/a.sh 是一个普通文件
dir/b.sh 是一个普通文件
dir/c.sh 是一个普通文件
dir/logs 是一个目录文件
dir/scripts 是一个目录文件
dir/server 是一个目录文件
dir/soft 是一个目录文件
收尾动作
[root@localhost ~]# rm -rf dir
if嵌套for语句实践3-获取系统支持的shell类型
查看脚本内容
[root@localhost ~]# cat os_shell_if_for.sh
#!/bin/bash
# 功能:if嵌套for查看系统支持的shell类型# 定制普通变量
shell_file='/etc/shells'# 获取所有文件列表
if [ -f ${shell_file} ]
thenfor shell in $(grep sh /etc/shells)doecho -e "\e[31m当前系统支持的shell类型有: ${shell}\e[0m"done
elseecho -e "\e[31m没有 ${shell_file} 文件\e[0m"
fi
脚本执行效果
[root@localhost ~]# /bin/bash os_shell_if_for.sh
当前系统支持的shell类型有: /bin/sh
当前系统支持的shell类型有: /bin/bash
当前系统支持的shell类型有: /usr/bin/sh
当前系统支持的shell类型有: /usr/bin/bash
小结