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

Linux之Shell编程(三)流程控制

1. for 循环

for 循环用于重复性执行某段代码,避免死循环,核心需包含循环初始值、循环条件、修改循环条件,有两种主要使用方式。

1.1 方式一:数值处理(固定循环逻辑)

  • 语法格式
for ((循环初始值; 循环条件; 修改循环条件))
do循环体代码(重复执行的内容)
done
  • 参数说明
    • 循环初始值:设定循环开始的初始数值,如i=1
    • 循环条件:控制循环是否继续,如i<=5(i 小于等于 5 时循环继续)。
    • 修改循环条件:每次循环后调整初始值,如i++(i 每次加 1)。
  • 简化写法for ((i = 0; i <= 5; i++)); do echo "$i"; done(一行写完,无需换行)。
  • 案例

打印 5 次 HelloWorld

#!/bin/bash
for ((i=0;i<5;i++))
doecho "$i - Hello World~"
done

求 10 以内数值的累加和

#!/bin/bash
count=0  # 存储累加结果
for((i=1;i<=10;i++))
docount=$(($count+$i))  # 每次循环累加i的值
done
echo "累加后的值:${count}"  # 输出结果为55

1.2 方式二:遍历数据集(依次取数据)

  • 语法格式
for 变量名 in 数据1 数据2 数据3 ...
do程序段(对每个数据执行的操作)echo $变量名  # 可输出当前遍历的数据
done
  • 简化写法
    • for N in 1 2 3; do echo $N; done(遍历指定数字)。
    • for N in {1..3}; do echo $N; done(遍历 1 到 3 的连续数字)。
  • 案例

遍历动物名称并输出

#!/bin/bash
for animal in cat dog elephant
doecho ${animal}  # 依次输出cat、dog、elephant
done

打印指定目录下所有文件名

#!/bin/bash
# 查询/root/shelldemo目录下所有文件名,赋值给filelist变量
filelist=$(ls /root/shelldemo)
# 循环遍历filelist,输出每个文件名
for filename in $filelist
doecho $filename
done

批量检测 IP 地址的连通性

九九乘法表

随机生成密码

小结

  • 方式一适用于从指定起始值到上限值的循环,需明确初始值、条件和步长。
  • 方式二适用于从数据集(如多个数据、数组)中依次取数据执行操作,直至数据取完。

2. while 循环

while 循环通过判断条件是否成立来控制循环执行,条件为 true 时继续循环,false 时结束,有三种常见使用方式。

2.1 方式一:基于表达式条件循环

  • 语法格式
while [ 表达式 ]
docommand(循环体代码)修改循环条件(避免死循环)
done
  • 案例:输入 yes/YES 停止循环:
#!/bin/bash
# 当输入不是yes且不是YES时,持续提示输入
while [ "$y" != "yes" -a "$y" != "YES" ]
doecho "请输入yes/YES停止循环:"read y  # 接收键盘输入的值
done
echo "循环停止了!"

2.2 方式二:基于数值条件循环(用 (()))

  • 语法格式
变量=初始值
while((循环条件))
do程序段let 变量修改  # 或((变量++)),let无需$表示变量
done
  • 说明let是 Bash 中用于计算的工具,支持自加(let no++)、自减(let no--)。
  • 案例:计算 10 以内数值的累加和:
#!/bin/bash
count=0  # 记录累加结果
num=1    # 循环初始值
while((num<=10))
docount=$[$count+$num]  # 累加计算let num++  # num每次加1,修改循环条件
done
echo "10以内数值的累加和:${count}"  # 输出结果为55

数值循环输出

2.3 方式三:无限循环(死循环,需手动控制退出)

  • 语法格式
while true
docommand(循环体代码)# 需在循环内添加退出条件,如if判断+exit
done
  • 案例:输入 yes 退出无限循环:
#!/bin/bash
while true
doecho "请输入字符串:"read yif [ "$y" == "yes" ]; thenexit 0  # 输入yes时退出循环fi
done

3. case 语句

case 语句用于多条件匹配,根据变量的不同值执行对应的程序段,类似 “多选一” 逻辑,需以esac结束。

语法格式

case $变量名称 in匹配模式1 )程序段1(变量匹配模式1时执行);;  # 模式1执行完毕,跳出case匹配模式2 )程序段2(变量匹配模式2时执行);;* )  # 默认模式,变量不匹配任何上述模式时执行默认程序段;;
esac  # case语句结束标记

案例:根据输入参数执行不同操作

#!/bin/bash
# 根据传递的参数$1匹配不同模式
case $1 in"hello")echo "Hello World!";;"test")echo "testting...";;"")  # 无参数时匹配echo "$0 没有参数"  # $0表示当前脚本名称;;*)  # 其他未匹配参数echo "默认";;
esac

  • 执行结果
    • 输入sh casedemo.sh test,输出 “testting...”。
    • 输入sh casedemo.sh hello,输出 “Hello World!”。
    • 直接输入sh casedemo.sh(无参数),输出 “casedemo.sh 没有参数”。
    • 输入sh casedemo.sh other(其他参数),输出 “默认”。

管理 httpd 服务(如 Apache 网页服务)的启动、停止、重启和状态查询

4. 总结

  1. for 循环:用于重复执行代码,分两种方式。一是数值处理,需明确循环初始值、条件和修改逻辑(如遍历 1-10);二是遍历数据集,依次取指定数据或目录文件(如遍历动物名、打印文件名)。
  2. while 循环:依条件控制循环,共三种方式。基于表达式条件循环(如输入特定值停止)、基于数值条件循环(用(( ))let处理数值,如累加计算)、无限循环(需手动加退出条件,如输入 yes 退出)。
  3. case 语句:实现多条件匹配,按变量值执行对应程序段,有匹配模式和默认模式,以esac结束(如根据输入参数输出不同内容)。
http://www.xdnf.cn/news/19171.html

相关文章:

  • 深度学习重塑医疗:四大创新应用开启健康新纪元
  • 深度学习系列 | Seq2Seq端到端翻译模型
  • Ansible Playbook 调试与预演指南:从语法检查到连通性排查
  • Qt QML注册全局对象并调用其函数和属性
  • 针对 “TCP 连接中断 / 终止阶段” 的攻击
  • PostgreSQL 灾备核心详解:基于日志文件传输的物理复制(流复制)
  • LINUX-网络编程-TCP-UDP
  • 【光照】[光照模型]发展里程碑时间线
  • 拆解《AUTOSAR Adaptive Platform Core》(Core.pdf)—— 汽车电子的 “基础技术说明书”
  • 无网络安装来自 GitHub 的 Python 包
  • More Effective C++ 条款18:分期摊还预期的计算成本(Amortize the Cost of Expected Computations)
  • 构建坚不可摧的数据堡垒:深入解析 Oracle 高可用与容灾技术体系
  • 开发中使用——鸿蒙CoreSpeechKit让文字发声
  • 基于SpringBoot的电脑商城系统【2026最新】
  • 【C++】第二十七节—C++11(下) | 可变参数模版+新的类功能+STL中一些变化+包装器
  • Gray Code (格雷码)
  • 【机器学习入门】4.1 聚类简介——从“物以类聚”看懂无监督分组的核心逻辑
  • 【蓝桥杯 2024 省 Python B】缴纳过路费
  • 网格纹理采样算法
  • SEO关键词布局总踩坑?用腾讯云AI工具从核心词到长尾词一键生成(附青少年英语培训实操案例)
  • 文件,目录,字符串使用
  • 金仓数据库迁移评估系统(KDMS)V4正式上线,助力企业高效完成数据库国产化替代
  • Ubuntu 中通过 SSH 克隆 Windows 上的 Git 仓库
  • STFT和梅尔频谱图
  • Notepad++常用设置
  • Session
  • HunyuanVideo-Foley - AI视频配音 根据视频和文本描述生成逼真的电影级音频 支持50系显卡 一键整合包下载
  • uniapp解析富文本,视频无法显示问题
  • 网络初识及网络编程
  • WPF中的ref和out