目录
Shell 和 Bash 的关系可以概括为:Bash 是 Shell 的一种具体实现,而 Shell 是一个通用的概念,指代所有用于与操作系统交互的命令行解释器。
以下是其核心要点:
1. Bash的定位与特点
- Shell的一种实现:Shell是用户与操作系统内核交互的接口程序,而Bash是Shell的一种具体实现(其他还有sh、zsh等)。
- 功能增强:兼容Bourne Shell语法,同时扩展了交互式功能(如命令补全、历史记录)和脚本编程能力(如数组、正则表达式)。
- 跨平台性:可运行于Linux、macOS,甚至通过Cygwin/MinGW移植到Windows。
2. 核心功能
- 交互式操作:
- 支持命令行编辑(
Tab
补全)、历史命令(history
)、别名(alias
)等 - 示例:输入
ls -l
可列出文件详情,cd ~
切换到家目录
- 支持命令行编辑(
- 脚本编程:
- 支持变量、条件判断(
if
)、循环(for
/while
)、函数等 - 示例脚本:
- 支持变量、条件判断(
#!/bin/bash
echo "Hello, $USER!" # 输出当前用户名
-
管道与重定向:
- 通过
|
连接命令(如ls | grep "txt"
),用>
或>>
重定向输出
- 通过
3. 与Shell的关系
- 包含关系:Bash是Shell的子集,属于其最流行的实现之一。
- 区别:
(1)Shell:(壳)
- 本质:用户与操作系统内核之间的命令行交互界面,负责解析用户输入的命令并调用系统功能。
- 泛指所有命令行解释器(如sh、csh、zsh)。
(2)Bash:(Bourne Again Shell)
- 定位:是 Bourne Shell(sh)的扩展版本,由 GNU 项目开发,目前是大多数 Linux 发行版和 macOS 的默认 Shell。
- 特点:兼容 sh 语法,同时增强功能(如命令补全、历史记录、脚本编程支持等)
- 特指Bourne Again Shell,功能更丰富(如支持数组、进程控制)
我这个使用者什么时候可以取得shell来工作呢?
当我们在终端界面登入Linux时候,系统就会给我一个shell让我来工作了。而这个登入取得的shell就记录在/etc/passwd这个档案内。
4. 实际应用场景
- 系统管理:批量处理文件、监控进程。
- 自动化任务:通过脚本定时备份日志或部署服务。
- 开发环境:配置环境变量、编译程序。
5. 如何验证当前Shell?
echo $SHELL # 显示默认Shell(如/bin/bash)
ps -p $$ # 查看当前会话使用的Shell
6、Bash shell 的操作环境
(1)路径与指令搜寻顺序
(2)bash 的进站与欢迎讯息:/etc/issue、/etc/motd
(3)环境配置文件:login、non-login shell、/etc/profile、~/.bash_profile、source、~/.bashrc
(4)终端机的环境设定:stty,set
//将这个串口在按波特率9600打开,并设置为输入状态,下一句可以接收数据
stty -F /dev/ttysWL1 speed 9600 cs8 cread clocal
echo -ne '\x1B\x0D\x4C' > /dev/ttysWL1
(5)通配符与特殊符号
通配符
bash环境种的特殊符号
7、数据流重导向(redirect)
数据流重导向就是将某个指令执行后应该要出现在屏幕上的数据,给他传输到其他的地方。
8、管线命令(pipe)
(1)撷取命令:cut、grep
//筛选进程列表中包含 T 的行
ps -ef|grep T
(2)排序命令:sort、uniq、wc
// 先排序,重复元素的只显示一次
cat /etc/passwd | sort |uniq -c
wc 相当于一个工具组,当你想知道目前你的账号档案中有多少个账号,就使用这个方法:
//账号档案中有多少个账号,因为这个文档一行代表一个使用者
cat /etc/passwd | wc -l
//账号里面有多少个字符
cat /etc/passwd | wc -c
(3)双向重导向:tee
tee 可以让standard output转存一份档案内并将同样的数据继续送到屏幕去处理。这样除了可以让我们同时分析一份数据并记录下来之外,还可以作为处理一份数据的中间暂存盘记录之用。
(4)字符转换命令:tr、col、join、paste、expand
tr可以用来删除一段讯息当中的文字,或者是进行文字讯息的替换!
col大多数是用来简单的处理[tab]按键取代为空格健!
join可以将有关系的资料放置在一起。但是要经过排序(sort)处理。
paste 比join简单点,直接将两行贴在一起,且中间以[tab]键隔开。
expand 就是在将[tab]按键转成空格键。
(5)分割命令:split
(6)参数代换:xargs
(7)关于减号:的用途
总结:Bash是功能强大的Shell实现,兼具交互便利性与脚本编程能力,是Linux生态的核心工具之一。