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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Folx软件安装教程及最新版下载

简介: Folx Pro是一款适合Mac的专业下载工具也是一款BT下载器,Folx中文版有一个支持Retina显示的现代界面,提供独特的系统排序、存储下载内容与预览下载文件。Folx中文官网提供Folx教程、激活码、下载。 安 装 包 获 取 地 址: …

Pytest框架中fixture功能详解

文章目录 1 定义 Fixture函数 2 Fixture 的函数参数 2.1 传入其他fixture函数作为参数 2.2 传入request对象参数 示例1:访问fixture的调用者 示例2:使用fixture的参数 3 Fixture 的作用域参数scope 3.1 scopeclass场景 3.2 scopesession场景 4…

Vue52-scoped样式

一、scoped样式的作用 1-1、scoped样式的作用 vue中组件的样式都是汇总到一起的。容易出现一个问题:类名冲突。 示例: school和student组件的类名都叫demo,则student的样式将覆盖school的样式,因为App.vue中,先引入的…

光明网发稿投稿流程与要求,光明日报如何投稿?附光明网多少钱(价格表)

对于想要在光明网发稿的作者来说,媒介多多网发稿平台是一个绝佳的投稿选择。光明网作为国内一流的新闻媒体平台,其严谨的文章审核标准和广泛的读者基础吸引着无数作者。然而,由于其严格的发稿标准,一些作者可能会遇到一些困难&…

昂科烧录器支持Prolific旺玖科技的电力监控芯片PL7413C1FIG

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表,其中Prolific旺玖科技的高度集成的电力监控芯片PL7413C1FIG已经被昂科的通用烧录平台AP8000所支持。 PL7413C1FIG是一款高度集成的电力监控芯片,用于测量电力使用情况的…

springboot集成shardingsphere

导入maven依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spr…

知识图谱存在的挑战---隐私、安全和伦理相关和测试认证相关

文章目录 隐私、安全和伦理相关测试认证相关 隐私、安全和伦理相关 从部署拓扑结构而言&#xff0c;知识图谱技术以数据为核心、数据库为载体的方式来存储&#xff0c;有单机、云平台、集群及其组合的部署方式&#xff0c;结合大数据平台、云平台、业务系统、灾备、网络系统及其…

转型AI产品经理(9):“逆反理论”如何应用在Chatbot产品中

心理逆反理论是社会心理学中的一个重要概念&#xff0c;该理论主要探讨了当个体感知到自己的自由被限制或选择受到威胁时&#xff0c;会产生一种想要恢复或维护这些自由的心理倾向&#xff0c;也就是会产生一种逆反心理&#xff0c;试图恢复或重新获得失去的自由。 核心观点 自…

[报错解决]Failed to bind to server socket: amqp://0.0.0.0:5672?maximumConnections

目录 报错信息解决 报错信息 Failed to start Apache ActiveMQ (localhost, ID:rhel-33317-1718469475002-0:1) | org.apache.activemq.broker.BrokerService | main java.io.IOException: Transport Connector could not be registered in JMX: java.io.IOException: Faile…

显示类控件——ProgressBar

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 一、ProgressBar介绍核心属性代码示例: 设置进度条按时间增长示例: 创建一个蓝色的进度条示例: 反…

LabVIEW程序的常见加密方式

LabVIEW程序的加密对于保护知识产权和敏感数据至关重要。本文将详细介绍LabVIEW程序常用的加密方式&#xff0c;包括VI加密、代码保护、文件加密和通信加密等&#xff0c;帮助开发者选择合适的加密方法来确保程序的安全性和完整性。 LabVIEW程序的常见加密方式 VI加密&#xf…

Javaweb06-Jsp技术

Jsp技术 一.Jsp的运行原理 **概述&#xff1a;**JSP是Java服务器页面&#xff0c;既可以写静态页面代码&#xff0c;也可以写动态页面代码 **特点&#xff1a;**跨平台性&#xff0c;业务代码相分离&#xff0c;组件重用&#xff0c;预编译 运行原理&#xff1a; 客户端发生…

ssldump一键分析网络流量(KALI工具系列二十二)

目录 1、KALI LINUX 简介 2、ssldump工具简介 3、在KALI中使用ssldump 3.1 目标主机IP&#xff08;win&#xff09; 3.2 KALI的IP 4、操作示例 4.1 监听指定网卡 4.2 指定端口 4.3 特定主机 4.4 解码文件 4.5 显示对话摘要 4.6 显示加密数据&#xff08;需要私钥&…

知识普及:什么是边缘计算(Edge Computing)?

边缘计算是一种分布式计算架构&#xff0c;它将数据处理、存储和服务功能移近数据产生的边缘位置&#xff0c;即接近数据源和用户的位置&#xff0c;而不是依赖中心化的数据中心或云计算平台。边缘计算的核心思想是在靠近终端设备的位置进行数据处理&#xff0c;以降低延迟、减…

Python开发者的7个PyCharm必备插件

大家好&#xff0c;本文将推荐使用7个必备的PyCharm IDE设置和插件&#xff0c;希望能帮助了解如何修改和增强IDE体验&#xff0c;使其更适合个人使用&#xff0c;毕竟作为开发者&#xff0c;大部分时间都是在这里工作。 1.String Manipulation 【链接】&#xff1a;https://…

c语言——扫雷游戏(简易版)

目录 前言游戏设计 前言 什么是扫雷游戏&#xff1f; 游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子&#xff0c;同时避免踩雷&#xff0c;踩到一个雷即全盘皆输。 这个游戏对于c语言的初学者来说难度还是挺大的&#xff0c;那我就实现一个初学者也能快速学…

Android Media Framework(六)插件式编程与OMXStore

OpenMAX IL Spec阅读到上一节就结束了&#xff0c;这一节开始正式进入到Framework阅读阶段&#xff0c;我们将了解OpenMAX框架是如何与Android Framework连接的。 1、插件式编程 插件式编程&#xff08;Plugin-based Programming&#xff09;是一种软件开发模式&#xff0c;它…

JavaFX 概述

要从 JavaFX 中充分受益&#xff0c;了解 JavaFX 的设计方式以及对 JavaFX 包含的功能有一个很好的概述是很有用的。本文的目的是为您提供 JavaFX 概述。本文将首先介绍一般的 JavaFX 设计&#xff0c;然后介绍 JavaFX 中的各种特性。 如果您熟悉 Flash/Flex&#xff0c;您会发…

【后端】websocket学习笔记

文章目录 1. 消息推送常见方式1.1 轮询 VS 长轮询1.2 SSE&#xff08;server-sent event)服务器发送事件 2. websocket介绍2.1 介绍2.2 原理2.3 websoket API2.3.1 客户端【浏览器】API2.3.2 服务端API 3. 代码实现3.1 流程分析3.2 pom依赖3.3 配置类3.4 消息格式3.5 消息类 参…

【Css】纯css展开、收起超出的文本

效果 展开 收起 未超出 码 -webkit-line-clamp: 3; 设置限制行数 <div class"wrap"> <inputtype"checkbox"id"exp-txt"><div class"text"><labelfor"exp-txt"class"btn"></label&g…