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可以根据用户输入的部分命令或文件名进行自动补全,提高命令输入的效率。

bash 复制代码
#1.输入"ls /us",然后按下 Tab 键,Bash会自动补全为:ls /usr
ls /us

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

2.2. 历史命令记录

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

  • 用户登录Linux终端后,系统重新读取命令历史记录 .bash_history 文件。
bash 复制代码
#1.linux默认的历史命令保存在用户目录下的".bash_history"文件
/root/.bash_history
/home/jungout/.bash_history

#2.查看历史命令(-c清除历史记录,-r恢复历史命令)
history

2.3. 别名和函数

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

bash 复制代码
#1.输入alias可以查看系统上所有别名
alias

#2.创建命令别名(输入ll就相当于输入ls -l)
alias ll='ls -l'

2.4. 元字符

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

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

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

  • 常见的元字符: ''单引号, "" 双引号,$ 美元符号, \ 反斜杠。
  • 特殊的转义字符: \n 换行,\r 回车,\t 制表符,\b 退格 。
bash 复制代码
#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三个文件)

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

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

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

    bash 复制代码
    mkdir {dir1,dir2}
  • ! :用于否定匹配

    bash 复制代码
    # 列出所有不以.txt结尾的文件
    ls !(*.txt)

2.6. 重定向

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

  • >:将命令的标准输出重定向到文件,如果文件不存在则创建,如果文件已存在则覆盖。
  • >>:将命令的标准输出追加到文件末尾,如果文件不存在则创建。
  • <:将文件内容重定向为命令的标准输入。
  • <<:用来表示输入重定向,可以将一个文本块作为输入传递给命令。
bash 复制代码
#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. 通过管道,可以将命令的输出结果传递给另一个命令进行进一步处理,从而实现数据的筛选、转换和汇总。
shell 复制代码
#1.列出当前目录的文件,并过滤出带有后缀txt的文件
ls -l | grep "txt"
相关推荐
山河君4 分钟前
ubuntu使用DeepSpeech进行语音识别(包含交叉编译)
linux·ubuntu·语音识别
鹏大师运维8 分钟前
【功能介绍】信创终端系统上各WPS版本的授权差异
linux·wps·授权·麒麟·国产操作系统·1024程序员节·统信uos
筱源源11 分钟前
Elasticsearch-linux环境部署
linux·elasticsearch
萨格拉斯救世主14 分钟前
jenkins使用slave节点进行node打包报错问题处理
运维·jenkins
川石课堂软件测试24 分钟前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
龙哥说跨境33 分钟前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫
pk_xz1234562 小时前
Shell 脚本中变量和字符串的入门介绍
linux·运维·服务器
小珑也要变强2 小时前
Linux之sed命令详解
linux·运维·服务器
海绵波波1072 小时前
Webserver(4.3)TCP通信实现
服务器·网络·tcp/ip
九河云4 小时前
AWS账号注册费用详解:新用户是否需要付费?
服务器·云计算·aws