Shell脚本-流程控制语句应用案例

83 阅读2分钟

在Shell脚本编程中,流程控制语句是实现逻辑控制和自动化任务处理的关键。通过合理运用条件判断、循环等流程控制语句,可以编写出高效、灵活的脚本程序。本文将通过几个实际的应用案例来展示如何使用这些流程控制语句解决具体的编程问题。

案例一:批量重命名文件

假设你有一组图片文件,想要根据特定规则(如添加前缀或修改扩展名)批量重命名这些文件。

脚本示例:

#!/bin/bash

# 定义新前缀
prefix="img_"

# 遍历当前目录下的所有jpg文件
for file in *.jpg; do
    if [ -f "$file" ]; then # 确保是普通文件
        new_name="${prefix}${file}"
        mv "$file" "$new_name"
        echo "Renamed '$file' to '$new_name'"
    fi
done

说明:

  • 使用for循环遍历指定类型的文件。
  • 通过if [ -f "$file" ]确保只处理普通文件。
  • mv命令用于重命名文件,并打印操作信息以便确认执行结果。

案例二:监控系统资源并发送警报

编写一个脚本来定期检查系统的CPU使用率和内存使用情况,如果超过设定阈值则发送警报(例如打印警告信息)。

脚本示例:

#!/bin/bash

# 设置警戒线
cpu_threshold=80
mem_threshold=75

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

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

说明:

  • 使用while true创建一个无限循环,持续监控系统状态。
  • topfree命令分别用于获取CPU和内存的使用情况。
  • bc命令用于浮点数比较。
  • sleep 60让脚本暂停60秒后再次检查,避免过于频繁地占用系统资源。

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

编写一个脚本,接受用户提供的参数来决定执行不同的操作,比如列出目录内容、创建新目录或删除目录。

脚本示例:

#!/bin/bash

case $1 in
    list)
        ls
        ;;
    create)
        mkdir "$2"
        echo "Directory '$2' created."
        ;;
    delete)
        rm -r "$2"
        echo "Directory '$2' deleted."
        ;;
    *)
        echo "Usage: $0 {list|create|delete} [directory]"
        exit 1
        ;;
esac

说明:

  • 利用case语句根据不同参数执行相应的命令。
  • $1$2代表第一个和第二个命令行参数。
  • 提供了基本的帮助信息,指导用户如何正确使用该脚本。

案例四:读取配置文件并动态调整行为

假设有这样一个需求:从配置文件中读取设置,并据此调整脚本的行为。例如,根据配置决定是否启用调试模式。

脚本示例:

#!/bin/bash

config_file="settings.conf"

# 读取配置文件
debug_mode=$(grep "DEBUG_MODE" $config_file | cut -d '=' -f2)

# 根据配置调整行为
if [ "$debug_mode" = "true" ]; then
    echo "Debug mode is enabled."
else
    echo "Debug mode is disabled."
fi

# 执行其他操作...

说明:

  • 使用grepcut从配置文件中提取特定设置。
  • 根据提取到的设置值调整脚本行为。

结语

感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!