今天主要分为两部分:
① Linux 自动化脚本实战
② C++ 语法进阶(函数对象与 Lambda)

一、Shell 实战:AutoManager 自动化脚本

今天的核心任务是写一个 自动编译与备份的脚本

 功能

  • 自动创建 backup/日期 目录

  • 备份当前所有 .cpp 文件

  • 自动编译并执行

  • 同时把结果写入日志文件 build.log

关键代码

#!/bin/bash
DATE=$(date +"%Y%m%d_%H%M%S")
BACKUP_DIR="./backup/$DATE"
LOG_FILE="./build.log"

mkdir -p "$BACKUP_DIR"
for file in *.cpp; do
    [ -f "$file" ] && cp "$file" "$BACKUP_DIR"
done

g++ *.cpp -o main >> $LOG_FILE 2>&1
if [ $? -eq 0 ]; then
    ./main | tee -a $LOG_FILE
else
    echo "编译失败" >> $LOG_FILE
fi

学到的知识

  • mkdir -p:自动创建多层目录

  • chmod +x:给脚本执行权限

  • >>:追加输出到文件(会自动创建)

  • tee -a:终端显示 + 同时写入日志


二、C++ 语法进阶:函数对象与 Lambda

 函数对象

struct Adder {
    template <typename T>
    T operator()(T a, T b) { return a + b; }
};
Adder add;
cout << add(3, 5) << endl;   // 输出 8

 Lambda 表达式

auto add = [](int a, int b){ return a + b; };
cout << add(3, 5) << endl;

Lambda 是函数对象的简化写法,能捕获外部变量,更方便灵活。三、今天的小问题与收获

问题解决
运行脚本时报 “Permission denied”chmod +x 文件名 解决
>> 没见过原来会自动创建并追加写入文件
tee -a 不懂可以同时输出到终端和日志文件

四、今日总结

Linux:能写出自动编译脚本、理解日志输出与权限。
C++:更理解了函数对象与 Lambda,知道它们在 STL、并发编程中常用。

更多推荐