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"
相关推荐
blessing。。3 分钟前
I2C学习
linux·单片机·嵌入式硬件·嵌入式
2202_7544215418 分钟前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言
努力的悟空1 小时前
国土变更调查拓扑错误自动化修复工具的研究
运维·自动化
运维&陈同学1 小时前
【zookeeper03】消息队列与微服务之zookeeper集群部署
linux·微服务·zookeeper·云原生·消息队列·云计算·java-zookeeper
旦沐已成舟1 小时前
DevOps-Jenkins-新手入门级
服务器
周末不下雨2 小时前
win11+ubuntu22.04双系统 | 联想 24 y7000p | ubuntu 22.04 | 把ubuntu系统装到1T的移动固态硬盘上!!!
linux·运维·ubuntu
软件技术员2 小时前
Let‘s Encrypt SSL证书:acmessl.cn申请免费3个月证书
服务器·网络协议·ssl
哎呦喂-ll3 小时前
Linux进阶:环境变量
linux
耗同学一米八3 小时前
2024 年河北省职业院校技能大赛网络建设与运维赛项样题四
运维·网络