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

[Linux][Shell][Shell基础] -- [Shebang][特殊符号][变量][父子Shell]详细讲解

目录

  • 0.前置知识
  • 1.Shebang
  • 2.Linux特殊符号整理
  • 3.变量
  • 4.环境变量
  • 5.父子shell
    • 0.概念
    • 1.创建进程列表(创建子shell执行命令)
  • 6.内置命令 vs 外置命令


0.前置知识

  • #用于注释
  • shell脚本语⾔属于⼀种弱类型语⾔:⽆需声明变量类型,直接定义使⽤
  • shell三剑客:grep、sed、awk
  • shell编程,尽量⽤内置系统操作,与内置函数

1.Shebang

  • 计算机程序中,Shebang指的是出现在⽂本⽂件的第⼀⾏前两个字符#!
  • 在Unix系统中,程序会分析Shebang后⾯的内容,作为解释器的指令,例如:
    • #!/bin/sh开头的⽂件,程序在执⾏的时候会调⽤/bin/sh,也就是bash解释器
    • #!/usr/bin/python开头的⽂件,代表指定Python解释器去执⾏
    • #!/usr/bin/env解释器名称,是⼀种在不同平台上都能正确找到解释器的办法
  • 注意事项
    • 如果脚本未指定Shebang ,脚本执⾏的时候,默认⽤当前shell去解释脚本,即$SHELL
    • 如果Shebang指定了可执⾏的解释器,如/bin/bash /usr/bin/python,脚本在执⾏时,⽂件名会作为参数传递给解释器
    • 如果#!指定的解释程序没有可执⾏权限,则会报错“bad interpreter: Permission denied”
    • 如果#!指定的解释程序不是⼀个可执⾏⽂件,那么指定的解释程序会被忽略,转⽽交给当前的SHELL去执⾏这个脚本
    • 如果#!指定的解释程序不存在,那么会报错“bad interpreter: No such file or directory”
    • #!之后的解释程序,需要写其绝对路径(如:#!/bin/bash),它是不会⾃动到$PATH中寻找解释器的
    • 如果使⽤bash test.sh这样的命令来执⾏脚本,那么#!这⼀⾏将会被忽略掉,解释器当然是⽤命令⾏

2.Linux特殊符号整理

  • ${vars}:取值变量的值
  • $():在括号中执行命令,且拿到命令的执行结果
  • ` `:在括号中执行命令,且拿到命令的执行结果
  • ():开启子shell执行命令结果
  • $vars:取出变量值

3.变量

  • 变量定义与赋值,注意变量与值之间不得有空格

    • 变量类型:bash默认把所有变量都认为是字符串
    • bash变量是弱类型,无需事先声明变量类型,声明和赋值同时进行
      name="SnowK"
      
  • 变量替换/引用

    name="SnowK"
    echo ${name}
    echo $name # {}可以省略
    
  • 变量名规则

    • 名称定义要做到⻅名知意,切按照规则来,切不得引⽤保留关键字
    • 只能包含数字、字⺟、下划线
    • 不能以数字开头
    • 不能⽤标点符号
    • 变量名严格区分⼤⼩写
  • 变量的作用域

    • 本地变量:只针对当前的shell进程
    • 环境变量:也称为全局变量,针对当前shell以及其任意子进程
      • 环境变量也分自定义、内置两种环境变量
    • 局部变量:针对在shell函数或是shell脚本中定义
  • 位置参数变量:用于shell脚本中传递的参数

    • 例如ls -l,中的-l就是位置参数变量
  • 特殊变量:shell内置的特殊功能变量

    • $?
      • 0:成功
      • 1~255:错误码
  • 自定义变量

    • 变量赋值varName=value
    • 变量引用${varName}、$varName
      • 单引号变量,不识别特殊语法
      • 双引号变量,能识别特殊语法
  • 不同的执行方式,不同的shell环境

    • 每次调⽤bash都会开启⼀个⼦shell,因此不保留当前的shell变量
    • 调⽤source或者.符号,是在当前shell环境加载脚本,因此保留变量
  • 在Linux中,反引号中的命令的执行结果会被保留下来(存进对应的变量中)


4.环境变量

  • 环境变量:⼀般指的是⽤export内置命令导出的变量,⽤于定义shell的运⾏环境、保证shell命令的正确执⾏
    • shell通过环境变量确定登录的⽤户名、PATH路径、⽂件系统等各种应⽤
  • 环境变量可以在命令⾏中临时创建,但是⽤户退出shell终端,变量即丢失,如要永久⽣效,需要修改环境变量配置⽂件
    • 用户个人配置文件
      • ~/.bash_profile
      • ~/.bashrc:远程登陆用户特有文件
    • 全局配置文件:修改全局配置文件,影响所有登陆系统的用户
      • /etc/profile
      • /etc/bashrc
      • 系统建议最好创建在/etc/profile.d/,而非直接修改主文件
    • 以个人配置文件,优先加载、读取、生效
  • 检查系统环境变量的命令
    • set:输出所有变量,包括全局变量、局部变量
    • env:只显示出全局变量
    • declare:输出所有的变量,如同set
    • export:显示和设置环境变量值
  • 撤销环境变量unset 变量名:删除变量或函数
  • 设置只读变量readonly:只有shell结束,只读变量才失效
  • 环境变量初始化与加载顺序
    请添加图片描述

5.父子shell

0.概念

  • 父子shell

    • source.,执行脚本,只在当前的shell环境中执行生效

    • 指定bash sh解释器运行脚本,是开启subshell,开启子shell运行脚本命令

    • ./script,都会指定Shebang,通过解释器运行,也是开启subshell运行命令

      请添加图片描述

  • 子shell
    请添加图片描述

  • 多个子shell
    请添加图片描述

1.创建进程列表(创建子shell执行命令)

  • 为什么学习子shell?意义在哪里?
    • 为了某个指令不卡住当前shell,开启子shell以达到异步的目的
    • 实现多进程的处理,提高程序并发执行效率
  • 进程列表:加上(),开启子shell运行命令,并且子shell是可以嵌套运行的
    (cd ~; pwd; ls; cd /tmp; pwd; ls)
    (pwd; (echo $BASH_SUBSHELL))
    
  • 检测是否在子shell环境中BASH_SUBSHELL:该变量的值特点
    • 如果是0,就是在当前shell环境中执行的
    • 否则就是开辟子shell去运行的
  • 示例
    • 检测是否开启了子shell运行命令
      • cd ~; pwd; ls; cd /tmp; pwd; ls; echo $BASH_SUBSHELL
    • 明确开启子shell运行的命令
      • (cd ~; pwd; ls; cd /tmp; pwd; ls; echo $BASH_SUBSHELL)

6.内置命令 vs 外置命令

  • 什么是内置命令,什么是外置命令?
    • 内置命令:在系统启动时就加载入内存,常驻内存,执行效率更高,但是占用资源
      • 内置命令和shell是为一体的,是shell的一部分,不需要单独去读取某个文件,系统启动后,就执行在内存中了
      • 特点:不会产生子进程去执行
    • 外置命令:系统需要从硬盘中读取程序文件,再读入内存加载
      • 自己单独下载的文件系统命令,处于bash shell之外的程序
      • 特点:一定会开启子进程执行

相关文章:

[Linux][Shell][Shell基础] -- [Shebang][特殊符号][变量][父子Shell]详细讲解

目录 0.前置知识1.Shebang2.Linux特殊符号整理3.变量4.环境变量5.父子shell0.概念1.创建进程列表(创建子shell执行命令) 6.内置命令 vs 外置命令 0.前置知识 #用于注释shell脚本语⾔属于⼀种弱类型语⾔:⽆需声明变量类型,直接定义使⽤shell三剑客&#…...

DS200CVMAG1AEB处理器 控制器 模块

DS200CVMAG1AEB特征: 高性能:采用先进的控制算法和高功率IGBT器件,可提供高电流和精确的运动控制。 高精度:采用高分辨率编码器和位置环路技术,位置精度可达0.1μm,适用于各种精密机械应用,如数…...

阈值分割后配合Connection算子和箭头工具快速知道区域的ID并选择指定区域

代码 dev_close_window () read_image (Image, E:/机器视觉学习/海康视觉平台/二期VM视觉学习/二期VM视觉学习/机器视觉程序/标定相机找圆心和焊头修正相机找圆心之算法软件/标定相机找圆心和焊头修正相机找圆心之算法软件/03 标定相机找圆心/S2/1号机/1.bmp) get_image_size …...

【work】AI八股-神经网络相关

Deep-Learning-Interview-Book/docs/深度学习.md at master amusi/Deep-Learning-Interview-Book GitHub 网上相关总结: 小菜鸡写一写基础深度学习的问题(复制大佬的,自己复习用) - 知乎 (zhihu.com) CV面试问题准备持续更新贴 …...

【LeetCode】12. 小张刷题计划

稳住,能赢!没有经验的同学在面试岗位的时候,总是显得手忙脚乱,所以多练习,把技能提升,眼界提升,接着心态放平和,不要慌张,把面试题目读懂读透彻就会大大提升赢的概率。 1…...

Tomcat部署以及优化

1、tomcat tomcat是用java代码的程序,运行的是java的web服务器 tomcat和php一样都是用来处理动态页面,tomcat也可以做为web应用服务器,开源的 php处理.php为结尾的 tomcat 处理.jsp nginx 处理 .html 2、tomcat的特点和功能 1、servle…...

ubuntu 22 安装 lua 环境 编译lua cjson 模块

在 windows 下使用 cygwin 编译 lua 和 cjson 简直就是灾难,最后还是到 ubuntu 下完成了。 1、下载lua源码(我下载的 5.1 版本,后面还有一个小插曲), 直接解压编译,遇到一个 readline.h not found 的问题,需要安装 re…...

地下城游戏中都有哪些类型的服务器?

地下城类型的服务器以其独特的魅力吸引了众多玩家。这些服务器通常基于流行的地下城探险游戏,如《Minecraft》的地下城模式或《Dungeon Fighter Online》等,提供了丰富多样的游戏体验。下面,我们将探讨几种不同类型的地下城服务器及其特点。 …...

大模型面试(二)

这次又接到一个大模型岗位的面试。但是从面试过程来看,现在大模型岗位都要求有相关工作经验,还是太难进了。还是说国内公司早就过了培养人的年代了? 问到了哪些知识点: 开源大模型:项目里用的是浦语大模型&#xff0…...

rsync远程同步--累了,明天继续再写~。

rsync官网链接 rsync(Remote Sync,远程同步)开源快速备份工具,是一个用于本地和远程文件同步的Unix-like命令行程序。它使用“快速数据传输算法”,只发送源和目标之间的差异,因此数据传输非常高效。 可以在不同主机之间镜像同步整 个目录树…...

每日刷题(二分查找,匈牙利算法,逆序对)

目录 1.Sarumans Army 2.Catch That Cow 3.Drying 4.P3386 【模板】二分图最大匹配 5. Swap Dilemma 1.Sarumans Army 3069 -- Sarumans Army (poj.org) 这道题就是要求我们在给的的位置放入 palantir,每个 palantir有R大小的射程范围,要求求出最少…...

LLM应用构建前的非结构化数据处理(三)文档表格的提取

1.学习内容 本节次学习内容来自于吴恩达老师的Preprocessing Unstructured Data for LLM Applications课程,因涉及到非结构化数据的相关处理,遂做学习整理。 本节主要学习pdf中的表格数据处理 2.环境准备 和之前一样,可以参考LLM应用构建前…...

如何从数码相机恢复已删除的照片

照片恢复是恢复已删除照片的最佳工具,它带有恢复 RAW 照片的选项。在本文中,我们将解释如何恢复已删除的照片。 不仅对于专业摄影师,对于像我们这样喜欢捕捉回忆的人来说,瞬间相机都是重要的数码设备。遗憾的是,就像智…...

设计模式使用场景实现示例及优缺点(创建型模式——单例模式、建造者模式、原型模式)

创建型模式 单例模式(Singleton Pattern) 单例模式(Singleton Pattern)在Java中的使用场景与在其他编程语言中类似,其主要目的是确保一个类只有一个实例,并提供一个全局的访问点。以下是单例模式的一些常…...

LAMP万字详解(概念、构建步骤)

目录 LAMP Apache 起源 主要特点 软件版本 编译安装httpd服务器 编译安装的优点 操作步骤 准备工作 编译 安装 优化执行路径 添加服务 守护进程 配置httpd 查看 Web 站点的访问情况 虚拟主机 类型 部署基于域名的虚拟主机 为虚拟主机提供域名解析&#xff…...

金南瓜科技SECS/GEM:引领智能制造新潮流

引言 在当今快速发展的半导体行业中,智能制造和自动化生产已成为提升效率和降低成本的关键。金南瓜科技凭借其先进的SECS/GEM解决方案,正成为这一变革的先锋。 SECS/GEM:智能制造的核心 SECS/GEM(SEMI Equipment Communications …...

昇思训练营打卡第二十一天(DCGAN生成漫画头像)

DCGAN,即深度卷积生成对抗网络(Deep Convolutional Generative Adversarial Network),是一种深度学习模型,由Ian Goodfellow等人在2014年提出。DCGAN在生成对抗网络(GAN)的基础上,引…...

东方通Tongweb发布vue前端

一、前端包中添加文件 1、解压vue打包文件 以dist.zip为例,解压之后得到dist文件夹,进入dist文件夹,新建WEB-INF文件夹,进入WEB-INF文件夹,新建web.xml文件, 打开web.xml文件,输入以下内容 …...

spring xml实现bean对象(仅供自己参考)

对于spring xml来实现bean 具体代码&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaL…...

MiniGPT-Med 通用医学视觉大模型:生成医学报告 + 视觉问答 + 医学疾病识别

MiniGPT-Med 通用医学视觉大模型&#xff1a;生成医学报告 视觉问答 医学疾病识别 提出背景解法拆解 论文&#xff1a;https://arxiv.org/pdf/2407.04106 代码&#xff1a;https://github.com/Vision-CAIR/MiniGPT-Med 提出背景 近年来&#xff0c;人工智能&#xff08;AI…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

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

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

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

tomcat入门

1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效&#xff0c;稳定&#xff0c;易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...