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

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.dtcms.com/a/359078.html

相关文章:

  • 知网文献高级检索方法
  • 防护墙技术(一):NAT
  • 如何调整Linux系统下单个文件的最大大小?
  • 2025年09月计算机二级Java选择题每日一练——第十二期
  • 介绍分布式事务之Seata
  • NV032NV037美光固态闪存NV043NV045
  • C++世界的大门——基础知识总结
  • 银河麒麟系统无法打开360浏览器的解决办法以及安装initramfs-tools报错解决方案
  • “HEU-AUTO”无线上网使用指南
  • 【开题答辩全过程】以 基于springboot的户外越野活动管理系统为例,包含答辩的问题和答案
  • 【CUDA进阶】MMA分析Bank Conflict与Swizzle(上)
  • Python 数据分析:计算,分组统计2,df.groupby()和grouped.agg()。听故事学知识点怎么这么容易?
  • 大模型推理显卡对比:Tesla P40 vs Titan RTX vs RTX A3000
  • GaussDB生产扩容引起的PANIC问题处理案例
  • 重叠IO模型
  • MySQL基础理解入门
  • 微服务架构中的 “双保险“:服务保护与分布式事务解决方案实战
  • 执行一条Select语句流程
  • Linux从入门到进阶--第四章--Linux使用操作
  • 深度学习核心损失函数详解:交叉熵、MSE、对比学习(InfoNCE)
  • Linux中的Shell编程 第一章
  • TechPowerUp GPU-Z中文版:专业显卡检测工具
  • 分分合合,门模块方案又兴起了
  • 架构进阶——解读 69页 方法轮IT规划培训 架构-重点-细节【附全文阅读】
  • FFmpeg音视频处理解决方案
  • 互联网大厂面试:大模型应用开发岗位核心技术点解析
  • CSS基础学习第二天
  • 算法之x数之和
  • nginx配置websock请求,wss
  • GooglePlay提审问题记录