首页 > 首页 > 基础理论 > Linux系统 > Linux Shell编程之:for循环语句
2024
05-16

Linux Shell编程之:for循环语句

一、循环介绍

循环是一种控制流程的结构,用于重复执行一段代码

遍历是一种数据操作的过程,用于访问并处理数据构成中的每个元素

在某些情况下,循环和遍历可以结合使用,以便在循环中遍历数据结构并对其进行操作

循环是计算机编程中非常重要的一种结构,其主要目的是为了简化代码编写,提高代码的重复利用率,及提高程序的效率。以下是使用循环的一些好处:

  • 重复执行代码:通过使用循环,可以在程序中重复执行一段代码,从而避免代码的重复编写
  • 简化程序逻辑:通过使用循环,可以在程序中重复执行一段代码,从而避免代码的重复编写,减少程序代码量,提高程序的可读性和可维护性。
  • 提高代码的重复利用率:通过将重复的代码封装在循环结构中,可以提高代码的重复利用率,减少代码冗余。
  • 提高程序的效率:循环可以让程序自动化执行重复任务,从而减少人工干预的次数,提高程序的效率和性能。

二、for语句的结构

读取不同的变量值,用来逐个执行同一组命令

#一般格式:
for 变量名 in 取值列表
do
命令序列
done

#类似C语言格式:
for ((i=0;i<555;i++))
do
echo “$i”
done

#死循环格式
for ((;;))
do
命令序列
done

三、常用转义字符

echo -n:表示不换行输出

echo -e:输出转义字符,将转义后的内容输出到屏幕上

只有加了-e才能执行下面的转义符:

\b:转义后相当于按退格键(backspace),但前提是“\b”后面存在字符;“\b”表示删除前一个字符,“\b\b”表示删除前两个字符

\c:不换行输出,在“\c”后面不存在字符的情况下,作用相当于echo -n;但是当“\c”后面任然存在字符时

“\c”后面的字符将不会被输出

\n:换行,被输出的字符从"\n"处开始另起一行

\f:换行,但是换行后的新行的开头位置连接着上一行的行尾

\v:与\f相同

\t:转移后表示插入tab,即横向制表符

\r:光标移至行首,但不换行,相当于使用“\r”以后的字符覆盖“\r”之前同等长度的字符;但是当“\r”后面不存在任何字符时,"\r"前面的字符不会覆盖

\:表示插入“\”本身

    四、跳出循环

    1、continue

    continue表示满足continue条件时跳出循环,但不影响后续循环执行,它的作用是在循环内部跳过本次循环并继续下一次循环

    2、break

    break表示满足break条件时直接结束此次循环

    五、实战案例

    1、for单循环


    案例一:单个变量为一串连续得字母或者数字

    
    1、字母
    
    # vim for.sh
    !/bin/bash
    
    for i in {a..d}                 // 变量i={abcd}
    do                               //命令序列
        echo $i                    //输出abcd
    done                           //结束循环
    
    # bash for.sh                //运行脚本,输出如下
    a
    b
    c
    d
    
    2、数字
    
    # vim for.sh
    
    !/bin/bash
    
    for i in {1..4}                 // 变量i={abcd}
    do                               //命令序列
        echo $i                    //输出abcd
    done                           //结束循环
    
    # bash for.sh                //运行脚本,输出如下
    1
    2
    3
    4

    案例二:单个变量为不连续得数字、字母、字符串

    # vim for.sh
    
    !/bin/bash
    
    params=("param1" "param2" "param3")    //此处可以是字母、数字、字符串等
    
    for param in "${params[@]}"
    do
        echo $param
    done
    
    # bash for.sh                //运行脚本,输出如下
    param1
    param2
    param3
    

    案例三:多个变量循环

    #! /bash/shell
    
    #以value_name=(value1 value2 value3)的形式定义数组
    a=(`ls |grep -v ^1|grep -v 22281_k8s_qkd_http.conf|grep -v for.sh| awk -F '_' '{print $1}'`)
    b=(`ls |grep -v ^1|grep -v 22281_k8s_qkd_http.conf|grep -v for.sh`)
    
    #以 ${a[number]} 的形式调用数组的第 number 个变量
    for (( i=0; i<16; i++ ))
    do
            echo ${a[$i]} and ${b[$i]}
    done

    2、for双循环

    [root@c7-1 ~]# vim 99.sh

    !/bin/bash

    for ((i=1;i<=9;i++)) //外循环,$i的取值为1,每次循环+1,等于9结束
    do
    for ((j=1;j<=i;j++)) //内循环,$j的取值为1,每次循环+1,等于$i结束
    do
    echo -n " $i x $j=$(expr $i * $j)" //每次循环不换行输出 $ix$j
    if [$j -eq $i ] //判断$j和$i是否相等
    then //条件成立
    echo -e "\n" //则换行
    fi //判断结束
    done //内循环结束
    done //外循环结束

    3、例3 for双循环加跳出循环
    [root@localhost opt]# vim ss.sh

    for i in {1..3}
    do
    for ((j=1;j<=5;j++))
    do
    if [ $j == 2 ]
    then
    continue //跳出j等于2的当此循环,不影响后面的循环
    fi
    echo "$j"
    done
    done

    [root@localhost opt]# sh ss.sh

    [root@localhost opt]# vim ss.sh

    for i in {1..3}
    do
    for ((j=1;j<=5;j++))
    do
    if [ $j == 2 ]
    then
    continue 2 //跳出当前循环,再跳出大循环
    fi
    echo "$j"
    done
    done

    [root@localhost opt]# sh ss.sh

    [root@localhost opt]# vim ss.sh

    for i in {1..3}
    do
    for ((j=1;j<=5;j++))
    do
    if [ $j == 2 ]
    then
    break //直接破坏当前循环
    fi
    echo "$j"
    done
    done

    [root@localhost opt]# sh ss.sh
    1
    1
    1

    参考文章:

    https://blog.csdn.net/m0_74412260/article/details/130405199

    https://www.cnblogs.com/huandada/p/10072487.html

    Linux Shell编程之:for循环语句 - 第1张  | 架构迷

    最后编辑:
    作者:摘星怪
    这个作者貌似有点懒,什么都没有留下。

    留下一个回复

    你的email不会被公开。