linuxshell循环,条件分支语句

循环结构

for循环

  1. 列表遍历

语法结构:

bash 复制代码
for 循环变量 in 元素1 元素2 元素3...元素n
do
	#循环体
done

举例:

bash 复制代码
#!/bin/bash
# -e 能解析\n的作用
echo -e "\n======遍历字符串列表============"
for fruit in 苹果 香蕉 橙子 葡萄 芒果
do 
	echo "当前遍历的水果是:$fruit"
done
  1. 序列范围遍历格式
bash 复制代码
# 方式一
for 循环变量 in {起始值..结束值}
do
	循环体
done

# 方式二
for 循环变量 in $(seq 起始值 步长 结束值)
do
	循环体
done

举例:

bash 复制代码
#!/bin/bash
echo "======遍历1-5=========="
# for循环:使用 {起始..结束} 生成数字序列,依次赋值给变量num
for num in {1..5}
# do 标记循环体的开始
do
	# 输出当前循环变量num的值,$num表示引用变量
	echo "当前遍历的数字是:$num"
done

echo "倒序输出1-5"
for num in {5..1}
do
	echo "当前数字:$num"
done

echo -e "\n===== 生成1-10奇数(步长2) ====="
for num in $(seq 1 2 10)
do
    echo "当前奇数:$num"
done
  1. c语言风格
bash 复制代码
for(( 初始表达式; 循环条件表达式; 更新表达式))
do
	循环体
done

案例题

遍历字符串列表 北京 上海 广州 深圳 杭州,依次输出「当前城市:XXX」;

bash 复制代码
#!/bin/bash
for f in 北京 上海 广州 深圳 杭州
do 
	echo "当前城市:$f"
done

遍历数字序列 10 到 1(倒序),依次输出格式为「当前倒序数字:XXX」(XXX 对应遍历的数字)

bash 复制代码
#!/bin/bash
for number in {10..1}
do
	echo "当前倒序数字是:$number"
done

计算 1 到 100 所有偶数的累加和,循环结束后输出「1 到 100 所有偶数的累加和:XXX」

bash 复制代码
#!/bin/bash
sum=0
for (( i=1; i<=100; i+2))
do
	sum=$((sum+i))
done
echo "1 到 100 所有偶数的累加和:$sum"

在上面这题的基础上,每累加10 个偶数,输出一次当前累加结果(格式:「前 10 个偶数累加和:XXX」、「前 20 个偶数累加和:XXX」......);

bash 复制代码
#!/bin/bash
sum=0
count=0  # 新增计数变量,统计累加的偶数个数

for (( i=2; i<=100; i+=2 ))
do
    sum=$((sum + i))
    count=$((count + 1))  # 每累加1个偶数,计数+1

    # 判断是否累计了10个偶数,满足则输出当前结果
    if [ $((count % 10)) -eq 0 ]
    then
        echo "前$count个偶数累加和:$sum"
    fi
done

# 输出最终结果
echo "1到100所有偶数的累加和:$sum"

遍历当前目录下所有 .txt 格式文件,依次输出「正在处理文件:XXX」(XXX 为对应 .txt 文件名);若没有 .txt 文件,输出「当前目录下未找到任何 .txt 文件」

bash 复制代码
#!/bin/bash
# 捕获当前目录下的所有.txt文件,屏蔽无匹配的错误提示
txt_files=$(ls *.txt 2>/dev/null)

# 判断是否存在.txt文件
if [ -z "$txt_files" ]
then
    echo "当前目录下未找到任何 .txt 文件"
else
    # 遍历所有.txt文件并输出
    for file in $txt_files
    do
        echo "正在处理文件:$file"
    done
fi

遍历当前目录下所有 .txt 格式文件,输出「正在处理文件:XXX」;

为每个 .txt 文件创建备份,备份文件名格式:原文件名_bak_当前日期.txt(例:test.txttest_bak_20260106.txt);

.txt 文件仍输出「当前目录下未找到任何 .txt 文件」。

bash 复制代码
#!/bin/bash
# 捕获当前目录下的.txt文件,屏蔽无匹配错误
txt_files=$(ls *.txt 2>/dev/null)
# 获取当前日期(年月日格式)
current_date=$(date +%Y%m%d)

if [ -z "$txt_files" ]
then
    echo "当前目录下未找到任何 .txt 文件"
else
    for file in $txt_files
    do
        echo "正在处理文件:$file"
        # 拼接备份文件名(去掉原文件.txt后缀,再拼接备份格式)
        backup_file="${file%.txt}_bak_${current_date}.txt"
        # 复制原文件创建备份
        cp "$file" "$backup_file"
    done
fi

while循环

bash 复制代码
#!/bin/bash
# 1. 初始化循环变量(必须先定义,否则循环无法正常终止)
循环变量=初始值

# 2. while 循环核心:条件判断为"真",就重复执行循环体
while [ 循环条件表达式 ]  # 注意:[ 前后必须有空格,表达式内部也需保留必要空格 ]
do
    # 3. 循环体:需要重复执行的代码(累加、输出等)
    
    # 4. 更新循环变量(必须写,否则会陷入无限死循环!)
    循环变量=$((循环变量 + 变化值))  # 常用自增:i=$((i+1))
done
bash 复制代码
#!/bin/bash
echo "计算1-10的累加和"
# 初始化变量:sum存储累加和,i 存储当前计数
sum=0
i=1

while [ $i -le 10]
do
	sum=$((sum+i))
	i=$((i+1))
done

echo "输入提出条件终止循环"
tips="请输入字符(输入'q'或者'Q'退出循环"
echo "$tips"

while read input && [ "$input" !="q" ] && ["$input" !="Q"]
do
	echo "你输入的内容是:$input"
	echo "$tips"
done

多分支结构的编程

if判断

bash 复制代码
if [ 条件1 ]  # 注意:[ 前后必须有空格
then
    # 条件1为真时,执行的代码
elif [ 条件2 ]  # 注意:是elif,不是else if(写错直接报错)
then
    # 条件2为真时,执行的代码
elif [ 条件3 ]
then
    # 条件3为真时,执行的代码
else
    # 所有条件都为假时,执行的代码
fi  # 必须以fi结尾(对应if,倒过来写)

while 循环 + 多分支

bash 复制代码
#!/bin/bash
# 1. 初始化循环变量
i=初始值
sum=0(可选,按需定义)

# 2. while循环核心条件
while [ 循环总条件 ]  # 如:i -le 100
do
    # 3. 多分支条件判断(嵌入循环体内)
    if [ 分支条件1 ]  # 如:i%2 -eq 0 (偶数)
    then
        分支1操作(如:sum=$((sum + i)))
    elif [ 分支条件2 ]  # 如:i%10 -eq 0 (能被10整除)
    then
        分支2操作(如:echo "当前数字是10的倍数:$i")
    else
        分支3操作(如:echo "当前数字是奇数:$i")
    fi

    # 4. 更新循环变量(防死循环,必须写)
    i=$((i + 1))
done

符合什么条件的数的个数或者和的计算

计算「符合条件的数的累加和」

适用场景:求 1 到 N 中,符合某条件(如能被 3 整除、偶数、大于 50)的数的总和。

bash 复制代码
#!/bin/bash
# 1. 初始化变量:累加和=0,循环变量按需初始化
sum=0

# 2. 遍历数字范围(C语言风格for循环,更简洁)
for (( i=【起始值】; i<=【结束值】; i++ ))
do
    # 3. 筛选符合条件的数(核心:多分支/单分支判断)
    if [ 【条件表达式】 ]  # 如:$((i%3)) -eq 0(能被3整除)
    then
        # 4. 符合条件,累加求和(算术运算必用$((...)))
        sum=$((sum + i))
    fi
done

统计「符合条件的数的个数」

适用场景:统计 1 到 N 中,符合某条件的数有多少个(如奇数的个数、能被 5 整除的个数)。

bash 复制代码
#!/bin/bash
# 1. 初始化变量:个数统计=0,循环变量按需初始化
count=0

# 2. 遍历数字范围
for (( i=【起始值】; i<=【结束值】; i++ ))
do
    # 3. 筛选符合条件的数
    if [ 【条件表达式】 ]
    then
        # 4. 符合条件,个数+1(算术运算必用$((...)))
        count=$((count + 1))
    fi
done

编写一个函数,接收函数,输出结果

bash 复制代码
#!/bin/bash

# 定义函数:function 函数名() { 函数体 }
function 函数名() {
    # 1. 接收参数:用 $1、$2、$3... 表示第1、2、3个传入参数(必记!)
    参数1=$1
    参数2=$2

    # 2. 函数核心逻辑(累加、统计、输出等,和之前的循环/判断一致)
    核心操作代码

    # 3. 输出结果(直接用 echo,或返回值后再输出)
    echo "输出结果:xxx"
}

# 调用函数:函数名 + 传入参数(参数之间用空格分隔)
函数名 参数值1 参数值2
bash 复制代码
#!/bin/bash

# 定义函数(接收2个参数,实现自定义逻辑,输出结果)
function calc_func() {
    # 步骤1:接收外部传入的参数,赋值给语义化变量(可选,提升可读性)
    param1=$1  # 第1个参数
    param2=$2  # 第2个参数

    # 步骤2:核心逻辑(可替换为累加、统计、文件处理等,和之前一致)
    result=$((param1 + param2))  # 示例:两数相加

    # 步骤3:输出结果(按题目格式修改,直接echo即可)
    echo "参数1:$param1,参数2:$param2,运算结果:$result"
}

# 步骤4:调用函数,传入2个参数(参数值按需修改)
calc_func 10 20

case

bash 复制代码
case 变量名 in
    模式1)
        命令序列1
        ;;  # 表示该分支结束,必须加
    模式2)
        命令序列2
        ;;
    模式3|模式4)  # 多个模式匹配同一分支(用|分隔)
        命令序列3
        ;;
    *)  # 通配符,匹配所有未命中的情况(类似else)
        默认命令序列
        ;;
esac  
相关推荐
江公望2 分钟前
VUE3中,reactive()和ref()的区别10分钟讲清楚
前端·javascript·vue.js
攀登的牵牛花5 分钟前
前端向架构突围系列 - 框架设计(二):糟糕的代码有哪些特点?
前端·架构
EndingCoder15 分钟前
函数基础:参数和返回类型
linux·前端·ubuntu·typescript
码客前端21 分钟前
理解 Flex 布局中的 flex:1 与 min-width: 0 问题
前端·css·css3
Komorebi゛21 分钟前
【CSS】圆锥渐变流光效果边框样式实现
前端·css
工藤学编程34 分钟前
零基础学AI大模型之CoT思维链和ReAct推理行动
前端·人工智能·react.js
徐同保34 分钟前
上传文件,在前端用 pdf.js 提取 上传的pdf文件中的图片
前端·javascript·pdf
怕浪猫35 分钟前
React从入门到出门第四章 组件通讯与全局状态管理
前端·javascript·react.js
欧阳天风43 分钟前
用setTimeout代替setInterval
开发语言·前端·javascript
EndingCoder1 小时前
箭头函数和 this 绑定
linux·前端·javascript·typescript