当前位置: 首页 > news >正文

Linux脚本- 执行当前文件下前500个.c文件,并将每个文件对应的执行结果重定向到同名的.ok文件中

需求:执行当前文件下前500个.c文件,并将每个文件对应的执行结果重定向到同名的.ok文件中

以下是一个用于实现该功能的 Bash 脚本。

#!/bin/bash# 计数器,用于限制处理的文件数量
counter=0# 遍历当前目录下的所有 .c 文件
for c_file in *.c; do# 如果已经处理了500个文件,就跳出循环if [ $counter -ge 500 ]; thenbreakfi# 编译 .c 文件gcc "$c_file" -o "${c_file%.c}.out" 2>/dev/null# 如果编译成功,则执行程序,并将结果保存到 .ok 文件中if [ $? -eq 0 ]; then"./${c_file%.c}.out" > "${c_file%.c}.ok" 2>&1elseecho "Compilation failed for $c_file" > "${c_file%.c}.ok"fi# 删除编译生成的可执行文件rm -f "${c_file%.c}.out"# 更新计数器counter=$((counter + 1))
done

这里是脚本做了什么:

  1. 初始化一个计数器 counter 为 0。
  2. 使用 for 循环遍历当前目录下的所有 .c 文件。
  3. 使用 gcc 编译每一个 .c 文件。
  4. 如果编译成功($? -eq 0 检查上一条命令的退出状态),执行编译出的程序并将输出重定向到 .ok 文件。
  5. 删除编译生成的可执行文件。
  6. 更新计数器。

要运行这个脚本,保存它到一个文件(比如 compile_and_run.sh),然后给它执行权限:

chmod +x compile_and_run.sh

然后执行它:

./compile_and_run.sh

注: ${c_file%.c} 是一种参数扩展(parameter expansion)的语法,用于对变量 $c_file 进行字符串操作。

在这种语法中,% 是一个操作符,表示从变量的末尾开始匹配并删除指定的模式。具体来说,${c_file%.c} 表示删除变量 $c_file 末尾的 .c。

这种操作在字符串处理中很常见,用于去除文件名中的文件扩展名或者删除字符串中的特定后缀。

让我们来看一个例子:

filename="example.txt"
echo ${filename%.txt}

输出结果是:

example

因为 ${filename%.txt} 删除了变量 $filename 末尾的 .txt。

在上面的第一个脚本中,${c_file%.c} 的作用是将 .c 文件的文件名提取出来,而不包括文件扩展名。然后使用 .out 作为新的文件扩展名,从而生成输出文件的名称。

相关文章:

Linux脚本- 执行当前文件下前500个.c文件,并将每个文件对应的执行结果重定向到同名的.ok文件中

需求:执行当前文件下前500个.c文件,并将每个文件对应的执行结果重定向到同名的.ok文件中 以下是一个用于实现该功能的 Bash 脚本。 #!/bin/bash# 计数器,用于限制处理的文件数量 counter0# 遍历当前目录下的所有 .c 文件 for c_file in *.c…...

高速公路自动驾驶汽车超车控制方法研究

目录 摘要 ............................................................................................................ I Abstract ...................................................................................................... II 目录 ...............…...

Java 多线程系列Ⅰ(创建线程+查看线程+Thread方法+线程状态)

多线程基础 一、创建线程的五种方法前置知识1、方法一:使用继承Thread类,重写run方法2、方法二:实现Runnable接口,重写run方法3、方法三:继承Thread,使用匿名内部类4、方法四:实现Runnable&…...

无入侵接口文档smart-doc

Smart-doc优点&#xff1a; 1.非侵入式生成接口文档 2.减少接口文档的手动更新麻烦&保证了接口文档和代码的一致 3.随时可生成最新的接口文档 4.保持团队代码风格一致:smart-doc支持javadoc&#xff0c;必须按照这个才能生成有注释的接口文档 最终效果 1.导入依赖 <pl…...

nacos配置超级管理员账户,只能mysql存储数据(或者其他数据库)

nacos本身是不允许授权超级管理员账号的&#xff0c;也就是角色名“ROLE_ADMIN”。作者在页面上试过了&#xff0c;不必再次尝试改的方式是直接改数据库里面的数据...

【前端自动化部署】,Devops,CI/CD

DevOps 提到Jenkins&#xff0c;想到的第一个概念就是 CI/CD 在这之前应该再了解一个概念。 DevOps Development 和 Operations 的组合&#xff0c;是一种方法论&#xff0c;并不特指某种技术或者工具。DevOps 是一种重视 Dev 开发人员和 Ops 运维人员之间沟通、协作的流程。…...

【C语言】探讨蕴藏在表达式求解中的因素

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;C语言 &#x1f525;该篇将探讨 操作符 和 类型转换 对表达式求解的影响。 目录&#xff1a; 隐式类型转换算术转换操作符的属性❤️ 结语 隐…...

2023/8/31 - Be a wise person and live in the present

...

【Flutter】Flutter 使用 video_player 播放视频

【Flutter】Flutter 使用 video_player 播放视频 文章目录 一、前言二、video_player 简介三、安装和配置四、基本使用五、完整示例 六、高级功能七、总结 一、前言 大家好&#xff0c;我是小雨青年&#xff0c;今天我要和大家分享一款非常实用的 Flutter 包——video_player。…...

如何使用 ChatGPT 快速制作播客和其他长篇内容

使用ChatGPT快速制作播客和其他长篇内容是一个高效且具有一定创造性的过程。以下是一些详细的步骤和技巧&#xff0c;以帮助你充分利用ChatGPT来制作高质量的内容。 一、准备阶段 确定主题或话题&#xff1a;在开始制作之前&#xff0c;你需要明确你的播客或长篇内容将聚焦的主…...

JavaScript基础语法02——JS书写位置

哈喽&#xff0c;大家好&#xff0c;我是雷工&#xff01; 今天继续学习JavaScript基础语法&#xff0c;JS的书写位置&#xff0c;俗话说&#xff1a;好记性不如烂笔头&#xff0c;边学边记&#xff0c;方便回顾。 1、行内JavaScript 代码写在标签内部 示例&#xff1a; <…...

LInux快捷命令

切换到行头&#xff1a;ctrla 或者 ctrlhome 切换到行尾:ctrale 或者 ctrlend 光标向左切换一个单词&#xff1a;ctrl← 光标向右切换一个单词&#xff1a;ctrl→ 历史命令搜索&#xff1a;history 历史命令匹配第一条执行&#xff1a;!x &#xff08;x表示历史命令…...

jvm的内存划分区域

jvm划分5个区域&#xff1a; java虚拟机栈、本地方法栈、堆、程序计数器、方法区。 各个区各自的作用&#xff1a; 1.本地方法栈&#xff1a;用于管理本地方法的调用&#xff0c;里面并没有我们写的代码逻辑&#xff0c;其由native修饰&#xff0c;由 C 语言实现。 2.程序计数…...

什么是数据中心IP,优缺点是什么?

如果根据拥有者或者说发送地址来分类的话&#xff0c;可以将代理分为三类&#xff1a;数据中心ip,住宅ip,移动ip 本文我们来了解数据中心ip的原理以及他们的优势劣势&#xff0c;才能选择适合自己的代理。 一、什么是数据中心ip代理&#xff1f; 数据中心ip是由数据中心拥有…...

模块化与组件化:开发中的双剑合璧

引言&#xff1a;模块化与组件化的重要性 在现代软件开发中&#xff0c;随着项目规模的增长和技术的复杂性增加&#xff0c;如何有效地组织和管理代码变得越来越重要。模块化与组件化作为两种主要的代码组织方法&#xff0c;为开发者提供了有效的工具&#xff0c;帮助他们创建…...

【C++初阶】list的常见使用操作

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…...

排序之插入排序

文章目录 前言一、直接插入排序1、基本思想2、直接插入排序的代码实现3、直接插入排序总结 二、希尔排序1、希尔排序基本思想2、希尔排序的代码实现3、希尔排序时间复杂度 前言 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大…...

c# - - - 安装.net core sdk

如图&#xff0c;安装的是.Net Core 2.2版本 查看安装成功...

Golang Gorm 高级查询之where + find

插入测试数据 package mainimport ("fmt""gorm.io/driver/mysql""gorm.io/gorm" )type Student struct {ID int64Name string gorm:"size:6"Age intEmail *string }func (*Student) TableName() string {return "student&q…...

【LeetCode】30 天 Pandas 挑战

一、笔记 1.对某列进行筛选 df[(df[column1]条件1) | (df[column2]条件2) & (df[column3]条件3)][[columns]]真题&#xff1a; &#xff08;一&#xff09;条件筛选——1.大的国家&#xff08;一&#xff09;条件筛选——2.可回收且低脂的产品&#xff08;一&#xff09;…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...

React核心概念:State是什么?如何用useState管理组件自己的数据?

系列回顾&#xff1a; 在上一篇《React入门第一步》中&#xff0c;我们已经成功创建并运行了第一个React项目。我们学会了用Vite初始化项目&#xff0c;并修改了App.jsx组件&#xff0c;让页面显示出我们想要的文字。但是&#xff0c;那个页面是“死”的&#xff0c;它只是静态…...

Java并发编程实战 Day 11:并发设计模式

【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天&#xff0c;今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案&#xff0c;它们不仅提供了优雅的设计思路&#xff0c;还能显著提升系统的性能…...