文章目录

  • Shell编程文档整理
    • 一、Shell介绍
      • 1.1 简介
      • 1.2 Shell解释器
    • 二、快速入门
      • 2.1 编写Shell脚本
        • 2.1.1 创建脚本示例
        • 2.1.2 赋予执行权限
      • 2.2 执行Shell脚本
    • 三、Shell程序:变量
      • 3.1 语法格式
      • 3.2 变量使用
      • 3.3 变量类型
    • 四、字符串
      • 4.1 单引号
      • 4.2 双引号
      • 4.3 获取字符串长度
      • 4.4 提取子字符串
      • 4.5 查找子字符串
    • 五、Shell程序:参数传递
      • 5.1 参数传递方式
      • 5.2 特殊字符
      • 5.3 `$*` 和 `$@` 的区别
    • 六、Shell程序:运算符
      • 6.1 算术运算符
        • 6.1.1 **通过`( ( ) )`,`$[ ]`进行算术运算**
      • 6.2 关系运算符
      • 6.3 逻辑运算符
      • 6.4 字符串运算符
      • 6.5 文件测试运算符


Shell编程文档整理

一、Shell介绍

1.1 简介

Shell 是一个用 C语言编写的程序,通过 Shell 用户可以访问操作系统内核服务。

Shell类似于 DOS 下的 command 和后来的 cmd.exe。

Shell既是一种命令语言,又是一种程序设计语言。

Shell script 是一种为 shell 编写的脚本程序。

Shell 编程一般指 shell 脚本编程,不是指开发 shell 自身。

1.2 Shell解释器

Shell 编程跟传统的编程语言一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。

Linux 的 Shell 解释器种类众多,一个系统可以存在多个 shell,可以通过 cat /etc/shells 命令查看系统中安装的 shell。

bash 由于易用和免费,在日常工作中被广泛使用。同时,bash 也是大多数 Linux 系统默认的 Shell。
在这里插入图片描述


二、快速入门

2.1 编写Shell脚本

使用vi编辑器新建一个文件hello.sh(扩展名并不影响脚本执行)

#!/bin/bash
echo "Hello World !"
  • #! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell
  • echo 命令用于向窗口输出文本
2.1.1 创建脚本示例
mkdir shelldemo
cd shelldemo
vi hello.sh

在这里插入图片描述

内容:

#!/bin/bash
echo "Hello World!"

在这里插入图片描述

2.1.2 赋予执行权限
chmod +x ./hello.sh

在这里插入图片描述

2.2 执行Shell脚本

执行方式:

  1. ./hello.sh:在当前目录执行
  2. /xx/xxx.sh:书写全路径执行
  3. sh /xx/xxx.sh:作为解释器参数执行(无需执行权限)
  4. source xxx.dh:可以没有执行权限
    在这里插入图片描述

三、Shell程序:变量

3.1 语法格式

变量名=

命名规则:

  • 等号两边不能有空格
  • 首个字符必须为字母(a-z,A-Z)
  • 中间不能有空格,可以使用下划线(_)
  • 不能使用标点符号
  • 不能使用 bash 里的关键字

3.2 变量使用

your_name="bigdata.com"
echo $your_name
echo ${your_name}
  • 花括号可选,用于帮助解释器识别变量边界
  • 变量可重新定义
  • readonly 定义只读变量
  • unset 删除变量(不能删除只读变量)

在这里插入图片描述

3.3 变量类型

  • 局部变量:仅在当前 shell 实例中有效
    在这里插入图片描述

  • 全局变量(环境变量):所有程序都可访问
    在这里插入图片描述


四、字符串

字符串是shell编程中最常用最有用的数据类型,字符串可以单引号,也可以用双引号,也可以不用引号

4.1 单引号

实例:

skill='linux'
str='I am goot at $skill'  # 变量无效
echo $str #输出

输出结果: I am goot at $skill
在这里插入图片描述
单引号字符串限制:
· 单引号里任何数字字符都会原样输出,单引号字符串中的变量是无效的;

· 单引号字串中不能出现单独一个单引号,但可以成对出现,作为字符串拼接使用。

4.2 双引号

示例:

skill='linux'
str="I am goot at $skill"  # 变量有效

在这里插入图片描述
输出结果: i am goot at linux

4.3 获取字符串长度

skill='hadoop'
echo ${#skill}  # 输出6

在这里插入图片描述

4.4 提取子字符串

str="I am goot at hadoop"
echo ${str:2}    # 输出:am goot at hadoop
echo ${str:2:2}  # 输出:am

在这里插入图片描述

4.5 查找子字符串

str="I am goot at hadoop"
echo `expr index "$str" am`  # 输出3

在这里插入图片描述


五、Shell程序:参数传递

5.1 参数传递方式

./shell程序 参数1 参数2 ...

脚本内获取参数:

  • $0:脚本名称
  • $1$2…:第1、2个参数
    在这里插入图片描述
    执行结果
    在这里插入图片描述

5.2 特殊字符

符号含义
$#传递到脚本的参数个数
$*以一个单字符串显示所有向脚本传递的参数
$$显示脚本运行的当前进程ID号
$!最后一个后台进程ID
$@所有参数作为列表
$?上一条命令退出状态,显示0则表示没有错误

在这里插入图片描述
在这里插入图片描述
$?:判断上一条命令是否正确,若输出为“0”则表示执行成功,非“0”则执行失败
在这里插入图片描述

5.3 $*$@ 的区别

  • 不加引号时相同
  • 加引号时:
    • "$*":所有参数作为一个字符串
    • "$@":每个参数作为独立字符串

在这里插入图片描述
在这里插入图片描述


六、Shell程序:运算符

6.1 算术运算符

Shell和其他编程语言一样,支持包括:算术、关系、逻辑、字符串等运算
符。
原生 /bin/bash 不支持简单的数学运算,但是可以通过其他命令来实现,
例如: expr
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
使用 expr$(())$[]

val=`expr 2 + 2`  #此处需要用反引号,且”2 + 2“之间需要空格
val=$((1+1))
val=$[1+2]

在这里插入图片描述
附加内容:read命令

·read -p 提示用户显示
·read -n 第一字符数

在这里插入图片描述
在这里插入图片描述

6.1.1 通过( ( ) )$[ ]进行算术运算

案例1、通过(())进行算术运算
在这里插入图片描述

在这里插入图片描述
案例2 通过“$[ ]"进行运算
在这里插入图片描述

6.2 关系运算符

运算符含义
-eq等于
-ne不等于
-lt小于
-gt大于
-le小于等于
-ge大于等于

6.3 逻辑运算符

  • -a:双方都成立(and)表达式1 -a表达式2
  • -o:单方成立(or)表达式1 -0 表达式2
  • &&||:用于 echo 或条件判断
    在这里插入图片描述

6.4 字符串运算符

运算符含义
-n非空字符串
-z空字符串
=判断两个字符串是否一样
!=判断两个字符串是否不相等

6.5 文件测试运算符

运算符含义
-f存在且是普通文件
-d存在且是目录
-s非空文件
-e文件存在
-r可读
-w可写
-x可执行

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AGI使用教程】Coze 搭建智能体(1)

欢迎关注【AGI使用教程】 专栏 【AGI使用教程】GPT-OSS 本地部署(1) 【AGI使用教程】GPT-OSS 本地部署(2) 【AGI使用教程】Coze 搭建智能体(1) 【AGI使用教程】Coze 搭建智能体(2) 【…

(二分查找)Leetcode34. 在排序数组中查找元素的第一个和最后一个位置+74. 搜索二维矩阵

首先要明确二分查找算法如何实现,是采用左闭右闭还是左闭右开 左闭右闭 第⼀种写法,我们定义 target 是在⼀个在左闭右闭的区间⾥,也就是[left, right] (这个很重要⾮常重要)。 区间的定义这就决定了⼆分法的代码应…

损失函数,及其优化方法

什么是损失函数?损失函数,也称为代价函数,是一个用来​​衡量机器学习模型预测结果与真实值之间差距​​的函数。损失函数的优化方法有哪些,各自优缺点是什么,他们的应用范围是什么?方法类别代表算法核心思…

pyqt+Python证件号智能校验工具

目录 一、引言 二、GUI界面设计 1.相关提示 2.效果演示 3.界面设计.py 三、主要程序详解 1.导入相关模块 2.初始化设置 3.校验过程 四、总程序代码 一、引言 在数字化转型加速的背景下,证件信息核验已成为金融、政务、安防等领域的刚需。传统人工校验存在…

主流技术栈 NestJS、TypeScript、Node.js版本使用统计

📊 2024年主流技术栈版本使用统计🔧 TypeScript 采用情况全球采用率: 38.5% 的开发者使用 TypeScript(Stack Overflow 2024)增长趋势: 从 2017年的 12% 增长到 2024年的 35%(JetBrains 调研)TypeScript vs …

Techub News 与 TOKENPOST 达成战略合作以推动中韩 Web3 资讯互通

Techub News 消息,香港 Web3 媒体 Techub News 与韩国区块链媒体 TOKENPOST 达成战略合作。TOKENPOST 将开设香港内容板块,由 Techub News 提供本地化行业资讯;同时 Techub News 将推出韩国内容专栏,内容源由 TOKENPOST 支持。这一…

Java面试实战系列【JVM篇】- JVM内存结构与运行时数据区详解(私有区域)

文章目录一、前言1.1 什么是JVM内存结构1.2 JVM内存结构与Java内存模型的区别1.3 为什么面试官爱问JVM内存结构二、JVM运行时数据区总览2.1 运行时数据区域划分2.2 线程私有区域 vs 线程共享区域三、线程私有区域详解3.1 程序计数器(PC Register)3.1.1 定…

鸿蒙中使用极光推送

官方给出的步骤是对的,就是一时不知道从何下手,自己整了下,按照这个来就行 1.步骤 打开 APP 通知功能 1.先按照这个页面进行配置SDK 集成指南 - 极光文档,主要就是下载极光sdk,然后在AGC里开通推送服务,配…

ruoyi_wvp流媒体[海康 大华 GB1812 onvif rtsp]

ZLMediaKitxiaz: https://download.csdn.net/download/jinhuding/91775096 webrtc: https://download.csdn.net/download/jinhuding/91764243 yoloonnx(v3,v7,v8s,v9c):https://download.csdn.net/download/jinhuding/91775170 项目部署步骤 1.后端目录结构 2.前端…

强化学习笔记(二):有限马尔可夫决策过程(一)

有限马尔可夫决策过程 基本概念 多臂老虎机仅涉及评价性反馈,即动作的即时奖励,估计每个动作 aaa 的价值 q∗(a)q_*(a)q∗​(a)。 有限马尔可夫决策过程(Finite MDP)引入了关联性因素,即在不同状态(情境&am…

Maven项目中settings.xml终极优化指南

文章目录1. 基础优化2. 镜像源优化(国内推荐)3. 插件仓库优化4. 并行构建提升 30%-80%5. 下载可靠性优化6. CI/CD 环境优化7. 进阶:依赖锁定与预下载8. 实现效果Maven settings.xml 终极优化指南,重点是:构建速度提升、…

RCC_APB2PeriphClockCmd

RCC_APB2PeriphClockCmd 函数在STM32的标准外设库中扮演着“电源开关”的角色。要理解这个函数,我们需要明白STM32微控制器的几个关键概念:1. 外设时钟与低功耗设计STM32内部有非常多的外设,如GPIO(A, B, C...D)、USAR…

用大语言模型实现语音到语音翻译的新方法:Scheduled Interleaved Speech-Text Training

用大语言模型实现语音到语音翻译的新方法:Scheduled Interleaved Speech-Text Training 在人工智能领域,语音到语音翻译(Speech-to-Speech Translation, S2ST)一直是极具挑战性的任务。传统的做法是将语音识别、文本翻译和语音合成三个步骤串联起来,而近年来,端到端的S2…

LLM学习:langchain架构——模型IO

1、什么是模型IO模型 I/O(Model I/O) 是 LangChain 框架中最核心的模块之一,负责处理与语言模型(LLM)交互的输入构建、模型调用和输出解析全流程。它主要分为三个模块:Prompts(输入构建&#xf…

Windows系统下python新一代三方库管理工具uv及VSCode配置

python新一代三方库管理工具uv uv是什么? uv是用RUST语言写的一个python三方库和项目管理工具,详见官网(uv)。 uv的安装 官网上提供了两种安装方式,第一种需要在PS终端里运行一下命令进行安装: powersh…

Node.js 多版本管理工具 nvm 的安装与使用教程(含镜像加速与常见坑)

适用人群:前端/后端/全栈开发者,Mac/Linux/Windows(nvm-windows)用户;需要在多项目间快速切换 Node 版本、或在国内网络环境下稳定安装 Node。一、为什么要用 nvm?一机多版本:不同项目依赖不同 …

Unity Shader unity文档学习笔记(二十一):几种草体的实现方式(透明度剔除,GPU Instaning, 曲面细分+几何着色器实现)

1.透明度剔除(性能较差,不同颜色时需要不同材质会导致多个dc) clip(_Color.a - _Cutoff); 传入值为0时 剔除 类似的草体效果: 2.GPU Instaning(可以自定义一次性合批最多1023个,能够传递颜色值等等(做草…

UX 设计入门终章:让洞察落地!用用户流程图、IA 和旅程图,设计用户与产品的互动故事

欢迎来到本系列课程的最后一课。 如果你把之前的学习比作是绘制一份建筑蓝图,那么今天,你将根据自己收集到的所有用户数据,描绘出空间布局(用户流程图)、理清结构关系(信息架构),并最…

【RAG知识库实践】向量数据库VectorDB

一、概述 1.1 什么是向量库 向量数据库是一种专门为存储、索引和查询高维向量数据而优化的数据库系统。与传统的关系型数据库不同,向量数据库将数据映射到向量空间中,使得数据的相似性计算、聚类、分类和检索变得更加高效和精确 向量数据库一般包括以下几个部分:索引、查询…

EasyExcel 3.x 导出动态表头,动态sheet页

动态导出sheet页Overridepublic void exportAnswerListV1(HttpServletResponse response, SmtSurveyUserAnswerRecord smtSurveyUserAnswerRecord) {// 1. 准备问卷数据String formType smtSurveyUserAnswerRecord.getFormType();if (ObjectUtil.isEmpty(formType)) {throw ne…