Shell 不神秘:拆解 Linux 命令行的逻辑与效率

news2025/4/2 20:19:41

初始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/sh

export num1=10

echo "$num1"

read -p 就是在输入之前,先遍历后面的字符串(可以是变量),再进行输入操作

代码演示

代码运行结果

如何输入多个值呢

多值输入

请记住这句话:先满足变量赋值,剩下的全部交给最后的变量

代码演示

代码运行结果

大家看一下 运行结果 再看一遍下面这句话

先满足变量赋值,剩下的全部交给最后的变量

先满足num1 再满足num2 再把剩下的全部都给num3

3、只读变量
格式

readonly 变量名

代码演示
#!/bin/bash

readonly num=1

echo "num = $num"

#赋值操作

num=10

echo "num = $num"
代码运行结果

可知,num为只读变量

也可以再次确定,shell中 某行报错不影响后续代码的正常进行

4、脚本的变量**导出为 环境变量**

直接使用系统的环境变量

查看环境变量 *env指令*

步骤

1、export 变量名=值

2、终端运行的时候 source 文件名

清除环境变量

在终端上用unset 变量名 删除环境变量

代码演示
05_shell.sh

#!/bin/sh

export num1=10

echo "$num1"

终端运行的时候,./文件名无法将变量设为环境变量。只有通过

这种方式才可以

06_shell.sh

#!/bin/bash

echo "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__

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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…

开源的CMS建站系统可以随便用吗?有什么需要注意的?

开源CMS建站系统虽然具有许多优点,但并非完全“随便用”。无论选哪个CMS系统,大家在使用的时候,可以尽可能地多注意以下几点: 1、版权问题 了解开源许可证:不同的开源CMS系统采用不同的开源许可证,如GPL、…

初始ARM

ARM最基础的组成单元。 最小系统:能系统能够正常工作的最少器件构成的系统 。 一、CPU基础定义 1. 核心定位 计算机三大核心部件: CPU(运算与控制)内部存储器(数据存储)输入/输出设备(数据交互…

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…

搭建前端环境和后端环境

搭建前端环境 ①、安装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) …

2025图像处理和深度学习国际学术会议(IPDL 2025)

重要信息 官网:www.IPDL.xyz 时间:2025年4月11-13日 地点:中国-成都 简介 随着深度学习和图像处理技术的迅速发展,相关技术的应用逐渐渗透到各个行业,如医疗影像分析、自动驾驶、安防监控和智能制造等。这些应用的…

使用uni-app框架 写电商商城前端h5静态网站模板项目-手机端-前端项目练习

以前用vue2 分享过一个电商商城前端静态网站项目-电脑端,需要的小伙伴还是很多的,最近又花了几天更新了一个 手机端的 电商商城h5项目,今天也分享一下实现方案。 对于以前写的 电商商城前端静态网站模板-电脑端,有兴趣的小伙伴 可…

远心镜头原理

文章目录 原理特点分类应用领域 参考:B站优致谱视觉 原理 远心镜头的工作原理基于其特殊的光学设计,旨在解决普通镜头存在的视差问题。它通过将镜头的光轴与成像面垂直,并使主光线平行于光轴,从而确保在一定的物距范围内&#xf…

centos7修复漏洞CVE-2023-38408

漏洞描述: CVE-2023-38408 是 OpenSSH 组件中的一个远程代码执行(RCE)漏洞,影响 OpenSSH 代理(ssh-agent)的安全性。该漏洞被发现于 2023 年 7 月,并被标记为 高危(CVSS 评分 7.3&a…

uniapp微信小程序封装navbar组件

一、 最终效果 二、实现了功能 1、nav左侧返回icon支持自定义点击返回事件(默认返回上一步) 2、nav左侧支持既显示返回又显示返回首页icon 3、nav左侧只显示返回icon 4、nav左侧只显示返回首页icon 5、nav左侧自定义left插槽 6、nav中间支持title命名 7…

系统思考与心智模式

我们的生命为什么越来越长?因为有了疫苗,有了药物。可这些是怎么来的?是因为我们发现了细菌的存在。但在很久以前,医生、助产士甚至都不洗手——不是他们不负责,而是根本不知道“细菌”这回事。那细菌是怎么被发现的&a…

数据库--数据库设计

目录: 1.数据库设计和数据模型 2.概念结构设计:E-R模型 3.逻辑结构设计:从E-R图到关系设计 4.数据库规范化设计理论 5.数据库规范化设计实现 1.数据库设计和数据模型 数据库设计会影响数据库自身和上层应用的性能。 一个好的数据库设计可以提…

[Mac]利用hexo-theme-fluid美化个人博客

接上文,使用Fluid美化个人博客 文章目录 一、安装hexo-theme-fluid安装依赖指定主题创建「关于页」效果展示 二、修改个性化配置1. 修改网站设置2.修改文章路径显示3.体验分类和标签4.左上角博客名称修改5.修改背景图片6.修改关于界面 欢迎大家参观 一、安装hexo-theme-fluid 参…

黑盒测试的场景法(能对项目业务进行设计测试点)

定义: 通过运用场景来对系统的功能点或业务流程的描述,设计用例遍历场景,验证软件系统功能的正确性从而提高测试效果的一种方法。 场景法一般包含基本流和备用流。 基本流:软件功能的正确流程,通常一个业务只存在一个基本流且基本流有一个…

通过Anaconda Prompt激活某个虚拟环境并安装第三方库

打开 Anaconda Prompt 在Windows中,可以通过开始菜单搜索 Anaconda Prompt 来打开。(红色箭头指向的地方。) 激活虚拟环境 输入以下命令来激活您的虚拟环境(假设虚拟环境名称为 myenv): conda activate…