Shell 学习笔记 - 导读 + 变量定义

2024-06-16 22:44

本文主要是介绍Shell 学习笔记 - 导读 + 变量定义,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

初识 Shell

本章学习目标

  • 了解什么是 Shell
  • 了解 Shell 的版本及用途
  • 掌握 Shell 变量的用法

导读( 了解 \color{cyan}{了解} 了解

现在的人们使用的操作系统(WindowsAndroidiOS 等)都带有图形化界面,简单直观,容易上手。然而早期的计算机并没有图形界面,人们只能使用繁琐的命令来控制计算机。

其实,真正能控制计算机硬件(CPU、内存、显示器等)的只有操作系统内核(kernel),图形化界面和命令行都是架设在用户和内核之间的桥梁,是方便用户控制计算机而存在的。

由于安全等原因,用户不能直接接触内核,因此需要在用户和内核之间增加 “命令解释器”,这样既能简化用户的操作,又能保障内核的安全。

Linux 下,这个命令解释器叫作 “Shell”,它能让用户更加高效、安全、低成本地使用 linux 内核。

在这里插入图片描述

1.1Shell 如何连接用户和内核

Shell 能够接收用户输入的命令,并对命令进行处理,处理完毕后再将结果反馈给用户,如输出到显示屏、写入文件等等。( 这就是我对于 S h e l l 的认知 \color{cyan}{这就是我对于 Shell 的认知} 这就是我对于Shell的认知

其实, S h e l l 程序本身的功能是很弱的,文件操作、输入输出、进程管理等都得依赖内核。 \color{red}{其实,Shell\ 程序本身的功能是很弱的,文件操作、输入输出、进程管理等都得依赖内核。} 其实,Shell 程序本身的功能是很弱的,文件操作、输入输出、进程管理等都得依赖内核。

用户运行一个命令,大部分情况下 Shell 都会去调用内核暴露出来的接口,这就是在使用内核,只是这个过程被 Shell 隐藏起来,在背后默默进行,用户看不到而已。

接口其实就是一个一个的函数,使用内核就是调用这些函数,除了函数没有别的途径使用内核。

比如用户在 Shell 中输入 cat log.txt 命令就可以查看 log.txt 文件中的内容。

log.txt 放在磁盘的哪个位置?分成了几个数据块?如何操作探头读取它?这些底层细节 Shell 统统不知道( 我也是嘿嘿。 \color{cyan}{我也是嘿嘿。} 我也是嘿嘿。

  • 它只能调用内核提供的 open()read() 函数,告诉内核读取 log.txt 文件;

  • 然后内核按照 Shell 的指令去读取文件,并将读取到的文件内容交给 Shell

  • 最后由 Shell 把文件内容呈现给用户( 呈现到显示器上还得依赖内核 \color{cyan}{呈现到显示器上还得依赖内核} 呈现到显示器上还得依赖内核

在这里插入图片描述

1.2 Shell 连接其他程序

Shell 中输入的命令,有一部分是 Shell 本身自带的,这叫作内置命令

有一部分是其他应用程序(一个程序就是一个命令),这叫作外部命令

Shell 本身支持的命令并不多,功能也有限,但是 Shell 可以调用其他程序,每个程序就是一个命令,这使得 Shell 命令的数量可以无限扩展。

结论:

其结果就是 Shell 的功能非常强大,完全能够胜任 Linux 的日常管理工作,包括

  • 文本或字符串检索
  • 文件的查找或创建
  • 大规模软件的自动部署
  • 更改系统设置
  • 监控服务器性能
  • 发送报警邮件
  • 抓取网页内容
  • 压缩文件等。

Shell 连接程序的示意图如图所示。

注意:“用户” 和 “其他应用程序” 是通过虚线连接的,因为用户启动 Linux 后直接面对的是 Shell,通过 Shell 才能运行其他应用程序。

在这里插入图片描述

1.3 Shell 同样支持编程

Shell 并不是简单的命令堆砌,用户还可以在 Shell 中编程,和使用 C++C#Javapython 等常见的编程语言并没有什么区别。

Shell 虽然没有 C++Javapython 等强大,但也支持以下基本的编程元素。

  • if … else 选择结构, case … in 开关语句,forwhileuntil 循环。
  • 变量、数组、字符串、注释、加减乘除、逻辑运算等概念。
  • 函数,包括用户自定义的函数和内置函数(如 prinf()export()、**eval()**等)。

从这个角度讲,Shell 也是一种编程语言,它的编译器(解释器)是 Shell 这个程序。因此,平时所说的 Shell 有时候是指连接用户和内核的这个程序,有时候又指 Shell 编程。

Shell 主要用来开发一些实用的、自动化的小工具,而不是用来开发具有复杂业务逻辑的中大型软件。

例如,检测计算机的硬件参数、搭建 Web 运行环境、日志分析等,Shell 都非常合适。

使用 Shell 的熟练程度反映了用户对 Linux 的掌握程度,运维工程师、网络管理员、程序员都应该要学习 Shell

linux 运维工程师来说, Shelll 更是必须掌握的技能。Shell 使自动化管理服务器集群成为可能,否则用户只能一个一个地登录所有服务器,对每一台服务器进行相同地设置,而这些服务器可能有成百上千之多,用户会在重复性的工作上浪费大量地时间。

1.4 Shell 是一种脚本语言

几乎所有的编程语言,如 C/C++、Pascal、Go 汇编语言等,都必须在程序运行之前将所有代码翻译成二进制形式,也就是生成可执行文件。

用户拿到的是生成的可执行文件,看不到源码。

这个过程叫作编译,这样的编程语言叫作编译型语言,完成编译过程的软件叫作编译器。

而有的编程语言,如 Shell、JavaScript、python、PHP 等,需要一边执行一边翻译,不会生成可执行文件,用户必须拿到源码才能运行程序。程序开始运行后会即时翻译,翻译完一部分执行一部分,不用等到所有代码都翻译完。

这个过程叫作解释,这样的编程语言叫作解释型语言或脚本语言(Script),完成解释过程的软件叫作解释器。

编译型语言的优点

  • 执行速度快
  • 对硬件要求低
  • 保密性好
  • 适合开发操作系统、大型应用程序、数据库等。

脚本语言的优点

  • 使用灵活
  • 部署容易
  • 跨平台性好
  • 非常适合 Web 开发以及小工具的制作。

Shell 就是一种脚本语言,用户编写完源码后不用编译,直接运行源码即可。

1.5 Shell 变量的定义

程序是在内存中运行的。在程序运行过程中,内存空间内的某些值是变化的,这个内存空间就称为变量。

为了便于操作,可以对这个空间进行命名,这个名称就是变量名。

简单来说,变量就是用一个特定的字符串去表示不固定的内容,变量的名称必须是合法的标识符。内存空间内的值就是变量值,在声明变量时可以不赋值,也可以直接赋给初值。

变量其实就是用来放置数值等内容的 “盒子”,想要使用这个可以存放数值等内容的魔法盒,就必须遵循一定的规则,首先需要提前进行如下定义。

定义变量名的语法格式如下:

变量名=变量值

代码如下:

varName=varVlaue

Shell 中,当第一次使用某个变量名时,实际上就定义了这个变量。如果没有给出变量值,则变量会被赋值为一个空字符串。

这篇关于Shell 学习笔记 - 导读 + 变量定义的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1067759

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

变量与命名

引言         在前两个课时中,我们已经了解了 Python 程序的基本结构,学习了如何正确地使用缩进来组织代码,并且知道了注释的重要性。现在我们将进一步深入到 Python 编程的核心——变量与命名。变量是我们存储数据的主要方式,而合理的命名则有助于提高代码的可读性和可维护性。 变量的概念与使用         在 Python 中,变量是一种用来存储数据值的标识符。创建变量很简单,

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个