Shell
Shell本质
Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。
Shell 是如何连接用户和内核的?
运行一个命令,大部分情况下 Shell 都会去调用内核暴露出来的接口,文件操作、输入输出、进程管理等功能都得依赖内核,接口其实就是一个一个的函数,使用内核就是调用这些函数。Shell 就是一个“中间商”,它在用户和内核之间“倒卖”数据。
进入Shell的两种方式
- 进入linux控制台Console,从图形界面模式进入控制台模式,快捷键
Ctrl+Alt+Fn(n=1,2,3...)
来回切换
eg:CentOS 在启动时会创建 6 个虚拟控制台,按下快捷键Ctrl + Alt + Fn(n=2,3,4,5,6)可以从图形界面模式切换到控制台模式,按下Ctrl + Alt + F1可以从控制台模式再切换回图形界面模式。也就是说,1 号控制台被图形桌面程序占用了。 - 使用终端
linux桌面环境的Terminal,CentOS 默认的图形界面程序是 GNOME,该终端模拟包也是 GNOME 自带的。
shell脚本
1 |
|
执行Shell脚本
新进程中执行
- 作为可执行程序运行
代码保存为test.sh文件,并cd到相应目录,在.sh文件中使用命令与在终端直接输入命令的效果是一样的。1
2
3chomd +x ./test.sh # 赋权限
./test.sh # 执行当前目录下的脚本
# 直接写test.sh,linux系统会默认去PATH里寻找,一般只有/bin,/sbin,/usr/bin,/usr/sbin等在PATH里,当前目录通常不在 - 作为解释器参数传递给Bash解释器
直接运行解释器,参数是shell脚本文件名,不用再第一行指定解释器信息1
2
3
4/bin/sh test.sh
/bin/php test.php
/bin/bash test.sh #用bash的绝对路径
bash test.sh #更简洁写法
- 检测是否开启了新进程
Linux 中的每一个进程都有一个唯一的 ID,称为 PID,使用$$
变量就可以获取当前进程的 PID。$$
是 Shell 中的特殊变量。
编写check.sh脚本
1 |
|
不同方法运行可以看到进程PID不一致,是不同的进程
当前进程中运行Shell脚本
source 是 Shell 内置命令的一种,它会读取脚本文件中的代码,并依次执行所有语句。你也可以理解为,source 命令会强制执行脚本文件中的全部命令,而忽略脚本文件的权限。
source 命令的用法为:source filename
也可以简写为:. filename
两种写法的效果相同。对于第二种写法,注意点号.和文件名中间有一个空格。
例如,使用 source 运行上节的 test.sh:
1 |
|
Shell 是一种脚本语言
1 |
|
Shell 文件包含
和其他语言一样,Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。
Shell 文件包含的语法格式如下:. filename
# 注意点号(.)和文件名中间有一空格,或source filename
创建两个 shell 脚本文件。test1.sh代码如下:
1 |
|
test2.sh代码如下:
1 |
|
接下来,为 test2.sh添加可执行权限并执行:输出菜鸟教程官网地址:http://www.runoob.com
1 |
|
参考资料
Shell
https://www.prime.org.cn/2023/01/13/Shell/