Shell脚本之while循环应用具体案例

 更新时间:2025年04月28日 09:02:27   作者:難釋懷  
这篇文章主要介绍了Shell脚本之while循环应用的相关资料,通过四个案例展示了如何利用while循环来处理不同场景下的编程问题,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

在Shell脚本编程中,while循环是一种非常有用的控制结构,适用于需要基于条件进行重复操作的场景。与for循环不同,while循环通常用于处理不确定次数的迭代或持续监控某些状态直到满足特定条件为止的任务。本文将通过几个实际的应用案例来展示如何使用while循环解决具体的编程问题。

案例一:监控服务器资源使用情况

假设我们需要编写一个脚本来实时监控服务器的CPU和内存使用率,并在任一项超过设定阈值时发送警告信息。

脚本示例:

#!/bin/bash

cpu_threshold=80
mem_threshold=75

echo "Monitoring CPU and Memory usage..."

while true; do
    cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}') # 获取CPU使用率
    mem_usage=$(free | grep Mem | awk '{print $3/$2 * 100.0}') # 获取内存使用率
    
    if (( $(echo "$cpu_usage > $cpu_threshold" | bc -l) )); then
        echo "Warning: CPU usage is above threshold at $cpu_usage%"
    fi

    if (( $(echo "$mem_usage > $mem_threshold" | bc -l) )); then
        echo "Warning: Memory usage is above threshold at $mem_usage%"
    fi
    
    sleep 5 # 每隔5秒检查一次
done

说明:

  • 使用top命令获取CPU使用率,free命令获取内存使用率。
  • bc -l用于执行浮点数比较。
  • 通过sleep 5让脚本每隔5秒检查一次系统状态。

案例二:读取文件并处理每一行

假设我们有一个包含多个URL的文本文件,需要对每个URL发起HTTP请求以检查其可访问性。

脚本示例:

#!/bin/bash

input_file="urls.txt"

while IFS= read -r url
do
    if curl --output /dev/null --silent --head --fail "$url"; then
        echo "$url is up"
    else
        echo "$url is down"
    fi
done < "$input_file"

说明:

  • 使用IFS=防止行首尾的空白被忽略。
  • curl --output /dev/null --silent --head --fail用于检测URL是否可访问。
  • < "$input_file"将文件内容作为输入传递给read命令。

案例三:用户交互式菜单

创建一个简单的用户交互式菜单,允许用户选择不同的操作直到他们选择退出。

脚本示例:

#!/bin/bash

while true; do
    echo "Menu:"
    echo "1) Display current date and time"
    echo "2) List files in current directory"
    echo "3) Exit"
    read -p "Please enter your choice [1-3]:" choice

    case $choice in
        1)
            date
            ;;
        2)
            ls
            ;;
        3)
            echo "Exiting..."
            break
            ;;
        *)
            echo "Invalid option, please try again."
            ;;
    esac
done

说明:

  • read -p提示用户输入选项。
  • 使用case语句根据用户的选择执行相应的操作。
  • break用于退出无限循环。

案例四:批量重命名文件

假设我们有一组文件名不符合规范,需要对其进行批量重命名。

脚本示例:

#!/bin/bash

prefix="new_"

ls | while read -r file; do
    if [[ $file != ${prefix}* ]]; then
        mv "$file" "${prefix}${file}"
        echo "Renamed '$file' to '${prefix}${file}'"
    fi
done

说明:

  • 使用ls列出当前目录下的所有文件。
  • if [[ $file != ${prefix}* ]]确保只重命名不带前缀的文件。
  • mv "$file" "${prefix}${file}"添加指定前缀并重命名文件。

结语

到此这篇关于Shell脚本之while循环应用的文章就介绍到这了,更多相关Shell脚本while循环案例内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Shell脚本中的位置变量参数(特殊字符)实例讲解

    Shell脚本中的位置变量参数(特殊字符)实例讲解

    这篇文章主要介绍了Shell脚本中的位置变量参数(特殊字符)实例讲解,本文讲解了$#、$* 、$$ 、$!、$@、$-、$?等特殊字符的作用,并给出使用实例,比较清晰和简洁,需要的朋友可以参考下
    2015-05-05
  • Shell中统计字符串中单词的个数的几种方法

    Shell中统计字符串中单词的个数的几种方法

    今天小编就为大家分享一篇关于Shell中统计字符串中单词的个数的几种方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Shell脚本的条件控制和循环语句

    Shell脚本的条件控制和循环语句

    这篇文章主要介绍了Shell脚本的条件控制和循环语句的相关资料,需要的朋友可以参考下
    2016-05-05
  • Linux 中批量提取文件夹下所有目录及文件名称

    Linux 中批量提取文件夹下所有目录及文件名称

    这篇文章主要介绍了Linux 中批量提取文件夹下所有目录及文件名称 ,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • Shell脚本实现复制文件到多台服务器的代码分享

    Shell脚本实现复制文件到多台服务器的代码分享

    这篇文章主要介绍了Shell脚本实现复制文件到多台服务器的代码分享,用在多机集群环境中非常方便,需要的朋友可以参考下
    2014-09-09
  • shell 通过makefile传参给c语言的实现示例

    shell 通过makefile传参给c语言的实现示例

    本文主要介绍了shell 通过makefile传参给c语言的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Shell脚本去重的几种方法实例

    Shell脚本去重的几种方法实例

    这篇文章主要介绍了Shell脚本去重的几种方法实例,本文直接给出代码实例,需要的朋友可以参考下
    2015-07-07
  • git revert和git reset的区别详解

    git revert和git reset的区别详解

    这篇文章主要介绍了git revert和git reset的区别详解的相关资料,需要的朋友可以参考下
    2017-04-04
  • Linux 打包压缩命令详解

    Linux 打包压缩命令详解

    在Linux系统中,有多种命令可以用于打包和压缩文件,这些命令可以帮助用户将多个文件或目录打包成一个文件,并可以选择不同的压缩算法来减小文件大小,下面给大家介绍Linux 打包压缩命令详解,感兴趣的朋友一起看看吧
    2023-09-09
  • Linux命令之find 和 grep用法详解

    Linux命令之find 和 grep用法详解

    今天主要介绍的是两个常用的搜索命令:find 和 grep 命令,文中代码示例介绍的非常详细,对我们学习Linux 命令有一定的帮助,需要的朋友可以参考下
    2023-06-06

最新评论