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.列出当前目录的文件,并过滤出带有后缀txt的文件
ls -l | grep "txt"