Shell 不神秘:拆解 Linux 命令行的逻辑与效率
初始shell
shell的概述
什么是shell
本质
shell本质是脚本文件:完成批处理。
比如 有一个文件 中十个文件,这十个文件中每个文件又有是个子文件,由人来处理,很麻烦,但如果写一个脚本文件,让脚本来替我们完成,这个过程就完成了批处理
sheel 即使**软件也是语言**
软件:shell 命令解析器(sh,ash,bash)
解析器: 对脚本文件逐行翻译成计算器能够识别的语言,并执行文件
查看解析器命令:echo $SHELL
语言:shell脚本语言。必须符合解析器的规则
编译: 生成可执行文件
shell默认调用的两个脚本文件
常用来配置环境
/etc/profile ~/.bashrc
/etc/profile
对系统(ubuntu)的所有用户都有效,用户登录系统的时候执行
~/.bashrc
对登陆的用户有效 用户登录,打开终端的时候

写脚本的步骤:
1、 指明脚本的解析器
#!/bin/dash
2、 写脚本
echo “初识shell”
3、给脚本加权限(没有才加)
chmod +x 脚本文件
单个#表示注释
#!用来声明脚本由什么shell解释 不写的话默认是shell
#!/bin/dash 当前脚本指明由bash 解析器解析
脚本执行方式
bash 直接用bash解析器解析当前文件,无需可执行权限,只要能读就能执行
sh
. (. + 一个空格)用当前解析器(并不是文件中指明的解析器)解析当前文件,无需加可执行权限 可读就可以
当前解析器是 echo $SHELL
./脚本文件 用需要加权限
在windows下 写脚本,Linux运行 可能出现的问题
我实在vscode中操作的Ubuntu虚拟机 的终端
这里可能会有问题,因为 在windows中空格是\r\n 而在linux中是\n 部分同学可能出现以下问题

解决方法
1、dos2unix
(1) 安装dos2unix sudo apt-get install dos2unix
(2) dos2unix 脚本文件
2、用vim打开对应脚本文件,在最后一行 执行
:set ff=unix
shell变量
自定义shell变量
脚本中,不用关心类型!!
num=10
注意 = 前后不要有空格,解析器非常严格,多一个空格少一个空格都会出现问题
shell脚本 就算某一行错误,如果影响不大,不会影响后续代码的执行 会继续执行之后的代码

代码运行结果

注意
1、此时的num=10 这里就是定义了 不再是赋值操作
2、echo类似于 c中的printf 执行遍历操作
echo会自动执行换行操作
常见变量操作
1、清除变量操作 unset
格式
unset 变量名
操作演示

代码运行结果

可见num变量 被清除
2、自定义shell变量 read
格式
read 变量名
注意 此时这个变量不要求read之前必须定义,但最好在read之前定义一下
拓展
我们前面提过echo会执行换行操作,这会使我们的界面变得不那么美观
因此 我向大家引入以下方法
05_shell.sh#!/bin/shexport num1=10echo "$num1"
read -p 就是在输入之前,先遍历后面的字符串(可以是变量),再进行输入操作
代码演示

代码运行结果
![]()
如何输入多个值呢
多值输入
请记住这句话:先满足变量赋值,剩下的全部交给最后的变量
代码演示

代码运行结果

大家看一下 运行结果 再看一遍下面这句话
先满足变量赋值,剩下的全部交给最后的变量
先满足num1 再满足num2 再把剩下的全部都给num3
3、只读变量
格式
readonly 变量名
代码演示
#!/bin/bashreadonly num=1echo "num = $num"#赋值操作num=10echo "num = $num"
代码运行结果

可知,num为只读变量
也可以再次确定,shell中 某行报错不影响后续代码的正常进行
4、脚本的变量**导出为 环境变量**
直接使用系统的环境变量
查看环境变量 *env指令*
步骤
1、export 变量名=值
2、终端运行的时候 source 文件名
清除环境变量
在终端上用unset 变量名 删除环境变量
代码演示
05_shell.sh#!/bin/shexport num1=10echo "$num1"
终端运行的时候,./文件名无法将变量设为环境变量。只有通过
![]()
这种方式才可以
06_shell.sh#!/bin/bashecho "06_shell.sh中的$num1"
代码运行结果

![]()
5、变量注意事项
知识点1 “” 与 ‘’
“” 双引号 表示可以说明里面的内容是一个整体,内部内容会被进一步解析
‘’ 单引号 表示可以说明里面的内容是一个字符串,内部内容不会被进一步解析
并且num=10 20 是错误的,不能这样赋值
应标明是一个整体 num=”10 20”
知识点2 转移字符
如果需要转义字符需要,需要加上 -e
知识点3 命名规则
变量名只能包含数字,英文字母和下划线,不能以数字开头,不能是关键字
知识点4 () {}
() 是只有在括号内有效
{} 是括号内外都有效
知识点5
作用是命令替换,优先执行中的命令,然后把执行的命令结果,替换到源命令中
这一点看一下
用户,成员,访客 默认权限 775文件夹 664文件
知识点6 中文空格与英文空格
有的编译器插件会在你输入空格时自动进行输入法转换,但有的不会。如果你的程序莫名报错,可以看看是不是这个原因
下面我来讲一下原因
我们以echo “你好”
#中文空格时,空格无法起到分割符号的作用,会把 “你好”当作一个整体,因此报错
知识点7 权限

我们看-rwxrwxr-x 这里是权限
第一个rwx是所有(拥有)者权限 此时是 可读可写可执行
第二个rwx是组员权限 此时是 可读可写可执行
第三个r_x是访客权限 此时是 可读不可写可执行
创建文件夹时 默认是775 rwx rwx r_x
创建文件时 默认是664 rw_ rw_ r__
相关文章:
Shell 不神秘:拆解 Linux 命令行的逻辑与效率
初始shell shell的概述 什么是shell 本质 shell本质是脚本文件:完成批处理。 比如 有一个文件 中十个文件,这十个文件中每个文件又有是个子文件,由人来处理,很麻烦,但如果写一个脚本文件,让脚本来替我…...
win 远程 ubuntu 服务器 安装图形界面
远程结果:无法使用docker环境使用此方法 注意要写IP和:数字 在 ubuntu 服务器上安装如下: # 安装 sudo apt-get install tightvncserver # 卸载 sudo apt purge tightvncserver sudo apt autoremove#安装缺失的字体包: sudo apt update s…...
大模型高质量rag构建:A Cheat Sheet and Some Recipes For Building Advanced RAG
原文:A Cheat Sheet and Some Recipes For Building Advanced RAG — LlamaIndex - Build Knowledge Assistants over your Enterprise DataLlamaIndex is a simple, flexible framework for building knowledge assistants using LLMs connected to your enterpris…...
【Qt】游戏场景和图元
一:图元 advance函数: 在 Qt 框架里,QGraphicsItem 是用于在 QGraphicsScene 中绘制图形项的基类。advance(int phase) 是 QGraphicsItem 类的一个虚函数,其主要用途是让图形项在场景的动画或更新过程里完成特定的逻辑操作。 p…...
C++位运算精要:高效解题的利器
引言 在算法竞赛和底层开发中,位运算(Bit Manipulation)因其极高的执行效率而广受青睐。它能在O(1)时间复杂度内完成某些复杂操作,大幅优化程序性能。本文系统梳理C位运算的核心技巧,涵盖基础操作、经典应用、优化策略…...
几种常见的.NET单元测试模拟框架介绍
目录 1. Moq 2. NSubstitute 3. AutoFixture 4. FakeItEasy 总结对比 单元测试模拟框架是一种在软件开发中用于辅助单元测试的工具。 它的主要作用是创建模拟对象来替代真实对象进行测试。在单元测试中,被测试的代码可能依赖于其他组件或服务,如数…...
开源的CMS建站系统可以随便用吗?有什么需要注意的?
开源CMS建站系统虽然具有许多优点,但并非完全“随便用”。无论选哪个CMS系统,大家在使用的时候,可以尽可能地多注意以下几点: 1、版权问题 了解开源许可证:不同的开源CMS系统采用不同的开源许可证,如GPL、…...
初始ARM
ARM最基础的组成单元。 最小系统:能系统能够正常工作的最少器件构成的系统 。 一、CPU基础定义 1. 核心定位 计算机三大核心部件: CPU(运算与控制)内部存储器(数据存储)输入/输出设备(数据交互…...
vue配置.eslintrc、.prettierrc详解
一、eslint简介 ESLint 是一个用于识别和报告 JavaScript 代码中潜在问题的静态代码分析工具。它可以帮助开发人员和团队维护一致的代码风格,减少错误,并确保代码质量。以下是 ESLint 的一些关键特点和功能: 1.静态代码分析:ESLi…...
DataPlatter:利用最少成本数据提升机器人操控的泛化能力
25年3月来自中科院计算所的论文“DataPlatter: Boosting Robotic Manipulation Generalization with Minimal Costly Data”。 视觉-语言-动作 (VLA) 模型在具身人工智能中的应用日益广泛,这加剧对多样化操作演示的需求。然而,数据收集的高成本往往导致…...
诠视科技MR眼镜如何安装apk应用
诠视科技MR眼镜如何安装apk应用 1、使用adb工具安装1.1 adb工具下载1.2 解压adb文件1.3 使用adb安装apk1.4 常用adb命令 2、拷贝到文件夹安装 1、使用adb工具安装 1.1 adb工具下载 点击下面的链接开始下载adb工具,下载结束以后解压文件。 下载链接: https://down…...
3.31Python有关文件操作
1.复制文件 import os from shutil ipmort copy,copytreepath os.path.join(os.getcwd(),test1.txt) target_path os.path.join(os.getcwd(),test1copy)copy(path,target_path) copytree(path,target_path) 注意:test1.txt 和 test1copy 文件夹/包 都点存在 …...
搭建前端环境和后端环境
搭建前端环境 ①、安装vscode,并安装相应的插件工具 ②、安装node.js,可以选择当前版本,或者其他版本 ③、创建工作区 创建一个空文件夹,然后通过vscode工具打开,保存为后缀名为.code-workspace ④、从gitee…...
Polhemus FastScan 单摄像头3D激光扫描器
FastSCAN Cobra是Polhemus公司研制的手持激光扫描仪。与以前的产品比较,它节省了30%的费用,体积也减小了一半 ,但仍然保留了所有功能,使用和携带都更加方便。作为超小的手持激光扫描仪,FastSCAN Cobra对扫描三维物体具…...
召唤数学精灵
1.召唤数学精灵 - 蓝桥云课 问题描述 数学家们发现了两种用于召唤强大的数学精灵的仪式,这两种仪式分别被称为累加法仪式 A(n) 和累乘法仪式 B(n)。 累加法仪式 A(n) 是将从1到 n 的所有数字进行累加求和,即: A(n)12⋯n 累乘法仪式 B(n) …...
《算法:递归+记忆化搜索》
递归记忆化搜索 此文章为简单讲义,详情请移步至主播的主页算法合集: 樱茶喵的个人主页 🔴递归 一.什么是递归? 函数自己调用自己。 二.为什么要用递归? 优点: 代码简洁,可读性好 可用于某些…...
框架修改思路
一、组件引入基本样式 面包屑(使用element plus的标签页) <!-- 标签页区域 --><el-tabs v-model"activeTab" type"card" closable tab-remove"removeTab" class"top-tabs"><el-tab-pane :key&q…...
每天学一个 Linux 命令(8):ls
大家好,欢迎来到《每天掌握一个Linux命令》系列。在这个系列中,我们将逐步学习并熟练掌握Linux命令,今天,我们要学习的命令是ls。 01 什么是ls命令 在Linux系统中,ls命令是“list”的缩写,其英文全称为“list directory contents”,即“列出目录内容”。该命令非常实用…...
2025图像处理和深度学习国际学术会议(IPDL 2025)
重要信息 官网:www.IPDL.xyz 时间:2025年4月11-13日 地点:中国-成都 简介 随着深度学习和图像处理技术的迅速发展,相关技术的应用逐渐渗透到各个行业,如医疗影像分析、自动驾驶、安防监控和智能制造等。这些应用的…...
Flutter 环境搭建、常用指令、开发细节
一、环境搭建 Flutter 插件和包管理平台:pub.devFlutter 环境安装,官方中文文档,按着官方的来就够了,没啥难度。安卓模拟器可以使用 Android Studio 自带的也可以第三方的,例如:Genymotion。配置环境变量&…...
使用uni-app框架 写电商商城前端h5静态网站模板项目-手机端-前端项目练习
以前用vue2 分享过一个电商商城前端静态网站项目-电脑端,需要的小伙伴还是很多的,最近又花了几天更新了一个 手机端的 电商商城h5项目,今天也分享一下实现方案。 对于以前写的 电商商城前端静态网站模板-电脑端,有兴趣的小伙伴 可…...
远心镜头原理
文章目录 原理特点分类应用领域 参考:B站优致谱视觉 原理 远心镜头的工作原理基于其特殊的光学设计,旨在解决普通镜头存在的视差问题。它通过将镜头的光轴与成像面垂直,并使主光线平行于光轴,从而确保在一定的物距范围内…...
centos7修复漏洞CVE-2023-38408
漏洞描述: CVE-2023-38408 是 OpenSSH 组件中的一个远程代码执行(RCE)漏洞,影响 OpenSSH 代理(ssh-agent)的安全性。该漏洞被发现于 2023 年 7 月,并被标记为 高危(CVSS 评分 7.3&a…...
Scikit-learn使用指南
1. Scikit-learn 简介 定义: Scikit-learn(简称 sklearn)是基于 Python 的开源机器学习库,提供了一系列算法和工具,用于数据挖掘、数据预处理、分类、回归、聚类、模型评估等任务。特点: 基于 NumPy、SciP…...
React AJAX:深入理解与高效实践
React AJAX:深入理解与高效实践 引言 随着Web应用的日益复杂,前端开发对数据的处理需求也越来越高。React作为目前最流行的前端框架之一,其与AJAX的结合使得数据的异步获取和处理变得更为高效和便捷。本文将深入探讨React与AJAX的关系&…...
uniapp微信小程序封装navbar组件
一、 最终效果 二、实现了功能 1、nav左侧返回icon支持自定义点击返回事件(默认返回上一步) 2、nav左侧支持既显示返回又显示返回首页icon 3、nav左侧只显示返回icon 4、nav左侧只显示返回首页icon 5、nav左侧自定义left插槽 6、nav中间支持title命名 7…...
python程序进行耗时检查
是的,line_profiler 是一个非常强大的工具,可以逐行分析代码的性能。下面是详细步骤,教你如何使用 line_profiler 来标记函数并通过 kernprof 命令运行分析。 1. 安装 line_profiler 首先需要安装 line_profiler: pip install l…...
用户模块——业务校验工具AssertUtil
AssertUtil 方法的作用 在写代码时,我们经常需要检查某些条件是否满足,比如: 用户名是否已被占用? 输入的邮箱格式是否正确? 用户是否有权限执行某个操作? 一般情况下,我们可能会这样写&am…...
系统思考与心智模式
我们的生命为什么越来越长?因为有了疫苗,有了药物。可这些是怎么来的?是因为我们发现了细菌的存在。但在很久以前,医生、助产士甚至都不洗手——不是他们不负责,而是根本不知道“细菌”这回事。那细菌是怎么被发现的&a…...
【计算机视觉】OpenCV实战项目- 抖音动态小表情
OpenCV实战项目- 抖音动态小表情 替换掉当前机器的文件位置即可运行: ‘C:/Users/baixiong/.conda/envs/python37/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml’ ‘C:/Users/baixiong/.conda/envs/python37/Lib/site-packages/cv2/data/haar…...
