Bash 脚本基础

embedded/2025/3/26 1:38:23/

一、Bash 脚本基础

  • 什么是 Bash 脚本:Bash 脚本是一种文本文件,其中包含了一系列的命令,这些命令可以被 Bash shell 执行。它用于自动化重复性的任务,提高工作效率。

  • Bash 脚本的基本结构:以 #!/bin/bash 开头,表示使用 Bash 解释器来执行脚本。接下来是具体的命令和操作。

二、编写和运行第一个 Bash 脚本

  1. 创建脚本文件:使用命令 nano hello.sh 创建名为 hello.sh 的文件。

  2. 编写脚本:在文件中输入以下内容:

    bash复制

    #!/bin/bash
    echo "Hello World"
  3. 保存并退出:按 Ctrl+X 键,然后按 Y 键确认保存,最后按回车键退出 nano 编辑器。

  4. 赋予执行权限:在终端中运行 chmod u+x hello.sh 命令,赋予脚本执行权限。

  5. 运行脚本:执行 ./hello.sh 命令,即可看到输出 Hello World

三、变量的使用

  • 声明变量:变量的声明方式为 var=value,注意等号前后不能有空格。

  • 访问变量:使用 $var 的方式来访问变量的值。

  • 示例

    bash复制

    #!/bin/bash
    message="Hello World"
    echo $message

四、传递参数和用户输入

  • 传递参数:在运行脚本时,可以传递参数,例如 ./my_script.sh arg1 arg2。在脚本中,使用 $1$2 等来代表第 1、第 2 个参数。

  • 用户输入:使用 read 命令来获取用户的键盘输入,例如:

    bash复制

    #!/bin/bash
    echo "What is your name?"
    read name
    echo "Hello, $name"

五、条件语句

  • if-else 语句:用于根据条件执行不同的代码块。例如:

    bash复制

    #!/bin/bash
    if [ $(whoami) = 'root' ]; thenecho "You are root"
    elseecho "You are not root"
    fi

六、循环语句

  • for 循环:用于遍历一系列的值。例如:

    bash复制

    #!/bin/bash
    for i in {1..5}
    doecho $i
    done
  • while 循环:只要条件判断式成立,循环就会一直继续。例如:

    bash复制

    #!/bin/bash
    i=1
    while [ $i -le 5 ]
    doecho $ii=$((i+1))
    done
  • until 循环:只要条件判断式不成立则进行循环,并执行循环程序。例如:

    bash复制

    #!/bin/bash
    i=1
    until [ $i -gt 5 ]
    doecho $ii=$((i+1))
    done

七、函数的创建和使用

  • 定义函数:使用 function 函数名 () { ... } 的格式来定义函数。例如:

    bash复制

    #!/bin/bash
    function greet () {echo "Hello, $1"
    }
  • 调用函数:通过函数名来调用函数,例如 greet "Alice"

八、错误处理

  • 检查命令是否成功:使用 $? 来获取最后执行命令的退出状态,0 表示成功,非 0 表示失败。

  • 使用 set 命令set -e 可以让脚本在遇到错误时立即退出。


http://www.ppmy.cn/embedded/176665.html

相关文章

MyBatis-Plus(Ⅲ)IService详解

目录 一、逐一演示 1.save(插入一条) 结果 断言(引入概念) 2.saveBatch(批量插入) 结果 3.saveOrUpdateBatch(批量插入&更新) 结果 4.removeById(通过id删除…

VUE2导出el-table数据为excel并且按字段分多个sheet

首先在根目录下建一个文件夹export用来存储export.js import * as XLSX from xlsxfunction autoWidthFunc(ws, data) {// 设置每列的最大宽度const colWidth data.map(row > row.map(val > {var reg new RegExp([\\u4E00-\\u9FFF], g) // 检测字符串是否包含汉字if (v…

从零到一开发一款 DeepSeek 聊天机器人

AI聊天机器人 目标设计方案系统架构技术选型功能模块 实现代码环境配置安装依赖 核心代码API 请求函数主循环函数 功能扩展1. 情感分析2. 多语言支持3. 上下文记忆4. 用户身份识别 总结附录 目标 开发一个智能聊天机器人,旨在为用户提供自然、流畅的对话体验。通过…

二分查找------查找区间

1. 题目 2. 思路和题解 这道题虽然是道中等题,并且看起来很复杂,但是实际上就是给定一个数组和目标值,让我们去寻找该目标值在数组中的位置。题目还提到说设计O(log n)的算法解决问题,更进一步暗示我们去用二分查找。要找开始位置…

DeepSeek+RAG局域网部署

已经有很多平台集成RAG模式,dify,cherrystudio等,这里通过AI辅助,用DS的API实现一个简单的RAG部署。框架主要技术栈是Chroma,langchain,streamlit,答案流式输出,并且对答案加上索引。支持doc,docx,pdf,txt。…

《AI大模型开发笔记》企业RAG技术实战(二)

接上一篇 《AI大模型开发笔记》企业RAG技术实战(一)https://mp.csdn.net/mp_blog/creation/editor/146381354 使用llamaindex实例 https://docs.llamaindex.ai/en/stable/api_reference/ 环境配置 我们继续使用前面langchain例子的python虚环境,不用新建,激活就行 …

Vue3中router最佳封装落地

文章目录 前言一、拆分路由文件夹?二、main.ts中注册路由总结 前言 router在使用过程中如果我们直接在一个文件的一个数组中配置,最后路由越来越多会导致不易管理,我们可以将一个页面的路由配置在一个数组中最后统一导入,这样就会…

eclipse [jvm memory monitor] SHOW_MEMORY_MONITOR=true

eclipse虚拟机内存监控设置SHOW_MEMORY_MONITORtrue D:\eclipse-jee-oxygen-2-win32-x86_64\workspace\.metadata\.plugins\org.eclipse.core.runtime\.settings org.eclipse.ui.prefs (文件比较多,别找错了) SHOW_MEMORY_MONITORtrue 重启 -xms 1024…