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"
相关推荐
可爱又迷人的反派角色“yang”14 小时前
ansible的概念及基本操作(一)
运维·ansible
shaohui97314 小时前
ARMv7 linux中断路由以及处理
linux·gic·cpsr·armv7
三小尛14 小时前
linux的开发工具vim
linux·运维·vim
陈陈爱java14 小时前
Conda 常用命令行
linux·windows·conda
twdnote14 小时前
dokcer 环境中集成LibreOffice
linux
ChristXlx14 小时前
Linux安装redis(虚拟机适用)
linux·运维·redis
源文雨15 小时前
PVE实现USB硬盘盒在备份前自动上电/结束后自动断电脚本
linux·运维·服务器·备份·perl·pve·usb硬盘盒
ascarl201015 小时前
准确--CentOS 7 配置用户资源限制(nofile / nproc)
linux·运维·centos
云和数据.ChenGuang15 小时前
运维工程师技术教程之ELK日志监控
运维·服务器·elk·运维技术·数据库运维工程师
m0_7381207215 小时前
渗透测试——靶机DC-4详细渗透教程
运维·网络·安全·web安全·php