Linux操作系统基础(12):Linux的Shell解释器

1. Shell的介绍

在Linux中,Shell 是一种命令行解释器,它是用户与操作系统内核之间的接口,它负责解释用户输入的命令,并将其转换成系统调用或其他操作系统能够执行的指令。

Shell 提供了一种交互式的方式来与操作系统进行通信,用户可以通过输入命令来执行各种操作。

  • 如文件操作、进程管理、网络通信等。
  • 常见的 Shell 包括 Bash、Zsh、Fish 等。

在这里插入图片描述

Bash(Bourne Again SHell)是一种常用的shell,是基于Bourne shell(sh)的一个扩展版本,提供了更多的功能和特性,比如命令历史记录、命令补全、变量替换等。因此,可以说bash是一种shell,它是Linux系统中最常用的shell之一。

不同的操作系统有不同的shell解释器,例如Linux中常用的Shell解释器是Bash,而Windows使用的是Cmd或者PowerShell。

  • Windows中存在 *.bat 批处理脚本
  • Linux中常用 *.sh 表示shell脚本

2. Bash的特性

Bash 是Linux系统中最常用的shell之一,Bash也是许多Linux系统默认的命令行解释器,它允许用户通过命令行界面与操作系统内核进行交互,并执行各种命令和脚本。由于其强大的功能和广泛的应用,Bash在Linux和其他类Unix系统中被广泛使用。

2.1. 自动补全

Bash可以根据用户输入的部分命令或文件名进行自动补全,提高命令输入的效率。

#1.输入"ls /us",然后按下 Tab 键,Bash会自动补全为:ls /usr
ls /us#2.输入"his",然后按下 Tab 键,Bash会自动补全为:history
his

2.2. 历史命令记录

Bash可以记录用户在命令行中输入的命令历史,用户可以使用上下箭头来浏览和重复之前输入的命令。

  • 用户登录Linux终端后,系统重新读取命令历史记录 .bash_history 文件。
#1.linux默认的历史命令保存在用户目录下的“.bash_history”文件
/root/.bash_history
/home/jungout/.bash_history#2.查看历史命令(-c清除历史记录,-r恢复历史命令)
history

2.3. 别名和函数

Bash支持命令别名和自定义函数,可以通过设置别名和定义函数来简化命令行操作。

#1.输入alias可以查看系统上所有别名
alias#2.创建命令别名(输入ll就相当于输入ls -l)
alias ll='ls -l'

2.4. 元字符

Bash中支持元字符,是具有特殊含义的字符,用于匹配文本或执行特定的操作。

  • 常见的元字符包括通配符 *?,定位符 ^$,字符类 [...],反向引用 \1 等等。
  • 这些元字符在正则表达式中也经常使用,用于进行文本匹配和替换操作。

在Shell中,转义字符是反斜杠(\)。反斜杠用于转义特殊字符(元字符),使其不再具有特殊含义,而是作为普通字符来处理。

  • 常见的元字符: ''单引号, "" 双引号,$ 美元符号, \ 反斜杠。
  • 特殊的转义字符: \n 换行,\r 回车,\t 制表符,\b 退格 。
#1.要输出双引号字符(")
echo "This is a quote: \""  #输出:This is a quote: "#2.要输出反斜杠字符(\)
echo "The path is: /home\\documents"  #输出:The path is: /home\documents

2.5. 通配符

通配符扩展:Bash支持通配符(如*?)来扩展文件名,用于匹配一系列文件名或者路径名的特殊字符。

  • * :匹配任意长度的任意字符(当前目录下存在file1.txt、file2.txt、file3.txt三个文件)

    # 列出所有以.txt结尾的文件
    ls *.txt
    
  • ? :匹配任意单个字符

    ls file?.txt
    
  • [] :匹配指定范围内的任意单个字符

    ls file[0-9].txt
    ls [a-z]ile[0-9].txt
    
  • {} :匹配指定的一组字符中的任意一个(集合)

    mkdir {dir1,dir2}
    
  • ! :用于否定匹配

    # 列出所有不以.txt结尾的文件
    ls !(*.txt)
    

2.6. 重定向

I/O 重定向(机制):Bash支持I/O重定向,可以将命令的输入和输出重定向到文件或其他命令。

  • >:将命令的标准输出重定向到文件,如果文件不存在则创建,如果文件已存在则覆盖。
  • >>:将命令的标准输出追加到文件末尾,如果文件不存在则创建。
  • <:将文件内容重定向为命令的标准输入。
  • <<:用来表示输入重定向,可以将一个文本块作为输入传递给命令。
#1.使用 > 将命令的输出重定向到文件(强制覆盖文件)
ls > filelist.txt#2.使用 >> 将命令的输出追加到文件末尾(文件不存在则创建)
ls >> filelist.txt#3.从文件中读取内容作为命令的输入(读取unsorted内容排序后再写入到sorted)
sort < unsorted.txt > sorted.txt#4.把文本块作为输入传递给cat命令。
cat << EOF
This is a multiline
message that is input
to the cat command
EOF

2.7. 管道

管道(机制):Bash支持管道操作符 |,可以将一个命令的输出作为另一个命令的输入(执行效果较慢)。

  1. 将一个命令的输出作为另一个命令的输入,实现多个命令的协作。
  2. 在数据处理过程中,可以通过管道将多个命令连接起来,实现复杂的数据处理任务。
  3. 通过管道,可以将命令的输出结果传递给另一个命令进行进一步处理,从而实现数据的筛选、转换和汇总。
#1.列出当前目录的文件,并过滤出带有后缀txt的文件
ls -l | grep "txt"

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

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

相关文章

内核线程创建-kthread_create

文章参考Linux内核线程kernel thread详解 - 知乎 大概意思就是早期创建内核线程&#xff0c;是交由内核处理&#xff0c;由内核自己完成&#xff08;感觉好像也不太对呢&#xff09;&#xff0c;创建一个内核线程比较麻烦&#xff0c;会导致内核阻塞。因此就诞生了工作队列以及…

Android Compose——ScrollableTabRow和LazyColumn同步滑动

Android Compose——ScrollableTabRow和LazyColumn同步滑动 效果数据实现TabList列表 如何同步实现&#xff1f;监听列表滑动变化计算列表子项索引位置Tab滑动 注 效果 Demo简述&#xff1a;此Demo所实现的效果为当滑动List列表时&#xff0c;所对应的Tab相对应进行滑动切换&a…

Linux 目录结构及其说明

Linux 操作系统遵循一种标准的目录结构&#xff0c;称为 Filesystem Hierarchy Standard&#xff08;文件系统层次结构标准&#xff09;&#xff0c;其定义了不同目录的用途和内容。 浅蓝色文字 /&#xff08;根目录&#xff09;&#xff1a; /根目录是整个文件系统的起点&…

第二百五十回

文章目录 1. 概念介绍2. 使用方法2.1 简单用法2.2 自定义用法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"三方包open_settings"相关的内容&#xff0c;本章回中将介绍另外一个三方包&#xff1a;bluetooth_enable_fork.闲话休提&#xff0c;让我们一起Talk Flu…

力扣2807.在链表中插入最大公约数

思路&#xff1a;遍历链表&#xff0c;对于每一个结点求出它与下一个结点的最大公约数并插入到俩个结点之间 代码&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}…

【数据库系统概念】第7-14章集合

文章目录 第七章 数据库设计和E-R模型&#xff08;重点&#xff01;&#xff01;&#xff01;&#xff09;~~7.1 设计过程概览&#xff08;了解&#xff09;~~7.1.1 设计阶段7.1.2 设计选择 7.2 实体-联系模型&#xff08;重点掌握&#xff09;7.2.1 实体集7.2.2 联系集联系集的…

ubuntu 22.04 安装r-base时缺少r-recommended

sudo apt-get install r-base时报错&#xff1a; 下列软件包有未满足的依赖关系&#xff1a; r-base : 依赖: r-recommended ( 4.3.2-1.2004.0) 但无法安装它 E: 无法修正错误&#xff0c;因为您要求某些软件包保持现状&#xff0c;就是它们破坏了软件包间的依赖关系。 解决方…

BLE Mesh蓝牙组网技术详细解析之Model Layer模型层(八)

目录 一、什么是BLE Mesh Model Layer模型层&#xff1f; 二、SIG Model 2.1 模型概念 2.2 消息格式 2.3 开关模型 四、资料获取 一、什么是BLE Mesh Model Layer模型层&#xff1f; Models Layer的作用是定义了一些通用的或特定的模型&#xff0c;用于实现网络节点设备…

Beauty algorithm(四)眼影

一、skills 前瞻 略 二、目标区域定位 1、 眼影区域 1、眼部关键点 左侧:36,37,38,39,40,41 右侧:42,43,44,45,46,47 2、计算roi区域的w,h,center 目的调整mask的比列。 FaceRegion left_es, right_es; left_es.w = landmarks.at(39).x - landmarks.at(36).x; left_es.…

书生·浦语大模型实战营第一次课堂笔记

书生浦语大模型全链路开源体系。大模型是发展通用人工智能的重要途径,是人工通用人工智能的一个重要途径。书生浦语大模型覆盖轻量级、重量级、重量级的三种不同大小模型,可用于智能客服、个人助手等领域。还介绍了书生浦语大模型的性能在多个数据集上全面超过了相似量级或相近…

并发(3)

目录 11.Synchronized本质上是通过什么保证线程安全的&#xff1f; 12.Synchronized使得同时只有一个线程可以执行&#xff0c;性能比较差&#xff0c;有什么提升的方法&#xff1f; 13.Synchronized由什么样的缺陷&#xff1f;Java Lock是怎么弥补这些缺陷的&#xff1f; 1…

《微信小程序开发从入门到实战》学习七十三

6.7数据缓存API 6.7.2 获取数据API 使用wx.getStorageSync和wx.getStorage接口可从本地缓存读取指定key中的数据。使用方式如下&#xff1a; // 异步接口&#xff0c;可以使用三回调函数 wx.getStorage({ key: key, success(res) { console.log(res.data) // 读取的数据保存到…

牛客网编程题——“求IBSN码”

这是我今天在牛客网上面刷题看到的一道相对而言比较有价值的题&#xff0c;个人非常的喜欢昂&#xff08;因为我没有做起...&#xff09;&#xff0c;先看题目&#xff1a; 每一本正式出版的图书都有一个ISBN号码与之对应&#xff0c;ISBN码包括9位数字、1位识别码和3位分隔符&…

看了致远OA的表单设计后的思考

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/n…

通信原理期末复习——计算大题(一)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

Linux操作系统基础(13):文件管理-文件目录命令

1. 文件操作 1.1. 创建文件和目录 touch命令用于创建新的空文件或更新现有文件的时间戳。 #1.创建一个test.txt文件 touch test.txt#2.创建多个文件&#xff08;test1.txt、test2.txt、test3.txt&#xff09; touch test{1..3}.txtmkdir命令用于创建一个新的目录&#xff08…

最小覆盖子串【子串】【滑动窗口】【哈希】

Problem: 76. 最小覆盖子串 文章目录 思路 & 解题方法复杂度Code 思路 & 解题方法 窗口左右边界为i和j&#xff0c;初始值都为0&#xff0c;j一直往右搜索&#xff0c;然后记录一下窗口内的字符是否达到了全部覆盖&#xff0c;如果达到了&#xff0c;那么就开始i往右搜…

交换机04_远程连接

通过远程管理方式连接交换机 1、telnet简介 telnet 是应用层协议 基于传输层TCP协议的&#xff0c;默认端口&#xff1a;23 采用的是明文密码方式 不是很安全&#xff0c;一般用于内网管理。 2、ssh协议简介 ssh 是应用层的协议&#xff0c;基于传输层的TCP协议&#x…

打造清晰的日志管理策略:如何在 NestJS 中集成 winston 高级日志系统

前言 在Web应用程序的开发过程中&#xff0c;日志管理是不可或缺的一部分。日志可以帮助我们了解应用程序的运行状态&#xff0c;监控系统行为&#xff0c;以及在出现问题时快速定位和解决问题。 对于使用NestJS框架的项目来说&#xff0c;集成一个高效、可扩展的日志系统尤为…