linux的shell脚本编程详解

Shell 脚本是一种用于自动化任务的脚本语言,在 Linux 和其他类 Unix 操作系统中非常流行。它通常用于任务自动化、系统管理和批处理。编写 Shell 脚本并使其自动化编译过程(例如使用 gcc 编译 C/C++ 程序)是一种常见的任务。

以下是一个详细的 Shell 脚本编程指南以及一个一键编译的示例。

Shell 脚本基础

1. 脚本文件的基本结构,以sh结尾的文件

一个基本的 Shell 脚本文件结构如下:

#!/bin/bash
# 这是一个注释
echo "Hello, World!"
  • #!/bin/bash:这是 shebang 行,用于指示脚本的解释器。
  • #:注释行,Shell 脚本中以 # 开头的行都是注释
2. 变量
#!/bin/bash
name="John Doe"
echo "Hello, $name!"
  • name="John Doe":定义变量。
  • echo "Hello, $name!":使用变量,变量名前加 $

3. 条件语句

#!/bin/bash
num=10
if [ $num -gt 5 ]; then
  echo "$num is greater than 5"
else
  echo "$num is not greater than 5"
fi
  • if [ condition ]; then ... fi:条件语句,-gt 表示大于。

4. 循环

#!/bin/bash
for i in {1..5}; do
  echo "Iteration $i"
done
  • for i in {1..5}; do ... done:循环,从 1 到 5 进行迭代。

一键编译示例

假设你有一个 C++ 项目,并希望编写一个 Shell 脚本来自动化编译过程。

1. 项目结构

假设项目目录如下:

project/
├── main.cpp
└── build.sh

2. main.cpp 示例

#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

3. build.sh 脚本

#!/bin/bash

# 设置变量
SOURCE="main.cpp"
OUTPUT="main"

# 编译源代码
g++ $SOURCE -o $OUTPUT

# 检查编译是否成功
if [ $? -eq 0 ]; then
    echo "Compilation successful."
    # 运行程序
    ./$OUTPUT
else
    echo "Compilation failed."
fi

脚本详解

  1. Shebang 行#!/bin/bash 指示使用 Bash 解释器运行此脚本。
  2. 设置变量:定义源文件和输出可执行文件的名称。
  3. 编译源代码:使用 g++ 编译源文件。如果编译成功,会生成一个可执行文件。
  4. 检查编译结果:使用 $? 检查上一条命令的返回状态码。如果返回状态码为 0,表示编译成功,否则表示失败。
  5. 运行程序:如果编译成功,运行生成的可执行文件。

运行脚本

1.确保脚本具有可执行权限:

chmod +x build.sh

2.运行脚本:

./build.sh

3.运行结果:

Compilation successful.
Hello, World!

总结

通过上述示例,你可以看到 Shell 脚本如何用于自动化编译过程。Shell 脚本在 Linux 系统中是一个非常强大的工具,可以极大地提高工作效率。了解和掌握 Shell 脚本编程,可以帮助你更好地管理和自动化各种任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/766723.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

k8s 中间件

1. zookeeper 是的&#xff0c;Zookeeper 和 Kafka 经常一起使用&#xff0c;Zookeeper 在 Kafka 中扮演了关键角色。以下是 Zookeeper 和 Kafka 在实际项目中的结合使用及其作用的详细说明。 项目背景 假设我们有一个分布式数据处理系统&#xff0c;该系统需要高吞吐量的实…

300关卡成语释义典故题库ACCESS\EXCEL数据库

成语典故指关于成语产生、形成、流传的故事传说。成语有很大一部分是从古代相承沿用下来的&#xff0c;它既代表了一个故事典故&#xff0c;又是一种现成的话&#xff0c;很多又有比喻引申意义而被广泛引用。 今天又获得了一个成语游戏的数据&#xff0c;即根据成语典故或者释…

vue+element-ui简洁完美实现个人博客“​响石潭 ​”

目录 一、项目介绍 二、项目截图 1.项目结构图 2.首页 3.生活 ​编辑 4.文章详情 ​编辑 5.关于我 ​编辑 ​编辑 三、源码实现 1.项目依赖package.json 2.项目启动 3.首页源码 四、总结 一、项目介绍 本项目在线预览&#xff1a;点击访问 参考官网&#xff1…

基于SpringBoot前后端分离旅游出行管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还…

vue3长列表优化,使用vue-virtual-scroller实现直播间弹幕列表虚拟滚动效果

使用的组件库是&#xff1a;https://github.com/Akryum/vue-virtual-scroller 官方文档&#xff1a;vue-virtual-scroller 安装依赖 npm install --save vue-virtual-scrollernextpnpm install --save vue-virtual-scrollernextyarn add vue-virtual-scrollernext 组件导入…

实战whisper第三天:fast whisper 语音识别服务器部署,可远程访问,可商业化部署(全部代码和详细部署步骤)

Fast Whisper 是对 OpenAI 的 Whisper 模型的一个优化版本,它旨在提高音频转录和语音识别任务的速度和效率。Whisper 是一种强大的多语言和多任务语音模型,可以用于语音识别、语音翻译和语音分类等任务。 Fast Whisper 的原理 Fast Whisper 是在原始 Whisper 模型的基础上进…

如何在《课外语文》期刊上发表论文?

如何在《课外语文》期刊上发表论文&#xff1f; 《课外语文》知网 G刊 月刊 3版3300字符 25年2-3月 &#xff08;栏目设置&#xff1a;学生作文&#xff1b;思辨阅读&#xff1b;课外读物&#xff1b;美文欣赏&#xff1b;整本书阅读&#xff1b;名师指路&#xff0c;趣味汉…

【经典算法题】两数之和

暴力解法 两层for循环&#xff0c;O(n*n) 优化解法 哈希&#xff0c;O(n) class Solution {public int[] twoSum(int[] nums, int target) {Map<Integer, Integer> hashtable new HashMap<Integer, Integer>();for (int i 0; i < nums.length; i) {if (ha…

工程安全监测仪器:振弦采集仪的应用与发展

工程安全监测仪器&#xff1a;振弦采集仪的应用与发展 振弦采集仪是一种常见的工程安全监测仪器&#xff0c;广泛应用于建筑、桥梁、隧道、地铁等工程项目中。它通过监测振弦的振动变化&#xff0c;可以及时发现结构变形或损坏情况&#xff0c;为工程的安全运行提供重要数据支…

0 TMS320F28379D 开坑

开坑原因 最近开始做实验&#xff0c;实验室的主控采用的是F2812FPGA&#xff0c;属于够用但不好用的状态。FPGA用于生成调制信号&#xff0c;DSP完成采样和控制。师兄师姐研究拓扑及调制策略&#xff0c;对驱动数量以及驱动逻辑有比较高的要求&#xff0c;因此不好脱离FPGA&a…

如何避免Java资源的过度配置

作为开发人员&#xff0c;我们经常会陷入两难的局面&#xff1a;我们既希望在应用中使用闪亮的新工具或代码库&#xff0c;又忌惮在部署到生产环境之后可能出现的未知问题。毕竟&#xff0c;没有人希望自己的手机老是在半夜叮咚作响&#xff0c;更不用说来自为了保持应用能够以…

增加Github访问稳定性

使用 steamcommunity_302软件 官方下载和使用地址&#xff1a; https://www.dogfight360.com/blog/686/#google_vignette

2.2.4 C#中显示控件BDPictureBox 的实现----ROI交互

2.2.4 C#中显示控件BDPictureBox 的实现----ROI交互 1 界面效果 在设定模式下&#xff0c;可以进行ROI 框的拖动&#xff0c;这里以Rect1举例说明 2 增加ROI类定义 /// <summary> /// ROI_single /// 用于描述图片感兴趣区域 /// type: 0:Rect1;1:Rect2;2:Circle ;3:…

SQL Server数据库的组成

《SQL Server 2022从入门到精通&#xff08;视频教学超值版&#xff09;》图书介绍-CSDN博客 对于数据库的概念&#xff0c;没有一个完全固定的定义&#xff0c;随着数据库历史的发展&#xff0c;定义的内容也有很大的差异&#xff0c;其中一种比较普遍的观点认为&#xff0c;…

Java - 程序员面试笔记记录 实现 - Part1

社招又来学习 Java 啦&#xff0c;这次选了何昊老师的程序员面试笔记作为主要资料&#xff0c;记录一下一些学习过程。 1.1 Java 程序初始化 Java 程序初始化遵循规则&#xff1a;静态变量优于动态变量&#xff1b;父类优于子类&#xff1b;成员变量的定义顺序&#xff1b; …

使用TensorFlow进行OCR识别:将表格图片转换为结构化数据

随着人工智能和机器学习技术的不断发展&#xff0c;OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;技术已经成为处理图像中文本信息的强大工具。TensorFlow是一个广泛使用的开源机器学习框架&#xff0c;它提供了丰富的API和工具&#xff…

【源码 +文档+调试讲解】大学生企业推荐系统ssm

大学生企业推荐系统采用B/S结构、java开发语言、以及Mysql数据库等技术。系统主要分为管理员和学生、企业三部分&#xff0c;管理员主要功能包括&#xff1a;首页、个人中心、学生管理、企业管理、招聘信息管理、个人简历管理、应聘职位管理、评价企业管理、交流论坛、系统管理…

IDEA中Maven的配置

目录 1. 安装maven 2. 配置环境变量 3. IDEA中配置Maven 4. 配置仓库目录 1. 安装maven 官网下载地址&#xff1a;Maven – Download Apache Maven 下载后&#xff0c;将zip压缩包解压到某个目录即可。 2. 配置环境变量 变量名称随意&#xff0c;通常为M2_HOME&#xff…

双向广搜——AcWing 190. 字串变换

双向广搜 定义 双向广度优先搜索&#xff08;Bi-directional Breadth-First Search, Bi-BFS&#xff09;是一种在图或树中寻找两点间最短路径的算法。与传统的单向广度优先搜索相比&#xff0c;它从起始点和目标点同时开始搜索&#xff0c;从而有可能显著减少搜索空间&#x…

【MindSpore学习打卡】应用实践-计算机视觉-FCN图像语义分割-基于MindSpore实现FCN-8s进行图像语义分割的教程

图像语义分割是计算机视觉领域中的一个重要任务&#xff0c;它旨在对图像中的每个像素进行分类&#xff0c;从而实现对图像内容的详细理解。在众多图像语义分割算法中&#xff0c;全卷积网络&#xff08;Fully Convolutional Networks, FCN&#xff09;因其端到端的训练方式和高…
最新文章