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
2
3
4
#!/bin/bash
echo "hello World!"
#!是一个约定的标记,它告诉脚本需要什么解释器来执行 /bin/bash就是指明了解释器的具体位置。
echo 命令用于向窗口输出文本

执行Shell脚本

新进程中执行

  1. 作为可执行程序运行
    代码保存为test.sh文件,并cd到相应目录,在.sh文件中使用命令与在终端直接输入命令的效果是一样的。
    1
    2
    3
    chomd +x ./test.sh # 赋权限
    ./test.sh # 执行当前目录下的脚本
    # 直接写test.sh,linux系统会默认去PATH里寻找,一般只有/bin,/sbin,/usr/bin,/usr/sbin等在PATH里,当前目录通常不在
  2. 作为解释器参数传递给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
2
#!/bin/bash
echo $$ #输出当前进程PID

不同方法运行可以看到进程PID不一致,是不同的进程

当前进程中运行Shell脚本

source 是 Shell 内置命令的一种,它会读取脚本文件中的代码,并依次执行所有语句。你也可以理解为,source 命令会强制执行脚本文件中的全部命令,而忽略脚本文件的权限。

source 命令的用法为:source filename
也可以简写为:. filename
两种写法的效果相同。对于第二种写法,注意点号.和文件名中间有一个空格。

例如,使用 source 运行上节的 test.sh:

1
2
3
4
5
6
7
8
9
[root@localhost ~]$ cd demo              #切换到test.sh所在的目录
[root@localhost demo]$ source ./test.sh #使用source
Hello World !
[root@localhost demo]$ source test.sh #使用source
Hello World !
[root@localhost demo]$ . ./test.sh #使用点号
Hello World !
[root@localhost demo]$ . test.sh #使用点号
Hello World !

Shell 是一种脚本语言

1
2
3
4
5
#!/bin/bash
# Copyright (c) http://c.biancheng.net/shell/
echo "What is your name?"
read PERSON # read 命令用来从标准输入文件(Standard Input,stdin,一般就是指键盘)读取用户输入的数据。
echo "Hello, $PERSON" # 输出变量 PERSON 内容

Shell 文件包含

和其他语言一样,Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。

Shell 文件包含的语法格式如下:. filename # 注意点号(.)和文件名中间有一空格,或source filename
创建两个 shell 脚本文件。test1.sh代码如下:

1
2
#!/bin/bash
url="http://www.runoob.com"

test2.sh代码如下:

1
2
3
4
5
6
7
8
#!/bin/bash
#使用 . 号来引用test1.sh 文件
. ./test1.sh

# 或者使用以下包含文件代码
# source ./test1.sh

echo "菜鸟教程官网地址:$url"

接下来,为 test2.sh添加可执行权限并执行:输出菜鸟教程官网地址:http://www.runoob.com

1
2
$ chmod +x test2.sh 
$ ./test2.sh

参考资料


Shell
https://www.prime.org.cn/2023/01/13/Shell/
Author
emroy
Posted on
January 13, 2023
Licensed under