一.什么是shell
Shell 是一个计算机程序,它提供了用户与操作系统内核之间的交互界面。它接受来自用户或其他程序的命令,并将其转换为操作系统能理解的形式,然后执行这些命令并将结果返回给用户或程序。
Shell 在操作系统中扮演着重要的角色,它允许用户执行各种操作,例如启动程序、管理文件和目录、设置环境变量、编写和执行脚本等。通过 Shell,用户可以直接与操作系统进行交互,而无需了解底层的系统细节。
Shell 可以是交互式的,用户可以逐行输入命令并立即看到结果;也可以是批处理的,用户可以编写包含一系列命令的脚本文件,并一次性执行这些命令。
-
SHELL语言是指UNIX操作系统的命令语言,同时又是该命令语言的解释程序的简称。
-
它虽然不是Unix/Linux系统内核的一部分,但它调用了系统核心的大部分功能来执行程序、
-
Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的。
-
建立文件并以并行的方式协调各个程序的运行。
二.shell特点
-
交互性: Shell 提供了与操作系统交互的界面,允许用户输入命令并即时看到结果。这种交互性使得用户可以直接控制计算机,执行各种任务。
-
脚本编程: 除了交互式使用外,Shell 还支持编写脚本文件,其中包含一系列的命令和控制结构,用于自动化和批处理任务。这使得 Shell 成为了自动化任务和批处理处理的强大工具。
-
灵活性: Shell 提供了许多内置命令和工具,同时也支持调用外部程序和脚本。这种灵活性使得用户可以根据自己的需要组合各种命令和工具,完成复杂的任务。
-
可定制性: 用户可以根据自己的喜好和需求定制 Shell 的配置和行为,例如修改提示符、设置别名、定义函数等。某些 Shell 还提供了丰富的插件和扩展机制,使得用户可以扩展其功能。
-
管道和重定向: Shell 支持管道和重定向操作,允许用户将命令的输入和输出进行流式处理和重定向到文件或其他命令。这种特性使得 Shell 在处理文本数据和协作多个命令时非常强大。
-
环境变量和配置: Shell 允许用户设置和管理环境变量,用于控制程序的行为和配置系统。通过环境变量,用户可以影响程序的执行环境、搜索路径、语言设置等。
-
多样性: 有多种不同的 Shell 可供选择,每种 Shell 都有自己的特点和优势。用户可以根据自己的喜好和需求选择适合的 Shell。
三.shell的多种执行方式
- 执行1:bash file
- 执行2:sh file
- 执行3:./file
- 执行4:. file
- 执行5: source file
执行which bash 和which sh 发现是同一个文件,执行方法三和执行方法四也是相同。
1和和2和3的方式,是子shell。这两种方式执行脚本时,会启动一个新的Shell,在新的Shell环境中读取并执行脚本中的命令。执行完脚本后,新的Shell环境也会随之消失。需要注意的是,如果脚本中改变了环境变量,如PATH,新的Shell环境会被改变,但原Shell环境不受影响。
如下图PID(进程ID)
3和4的方式,是本shell。这两种方式执行脚本时,不会启动新的Shell,而是在当前Shell环境下读取并执行脚本中的命令。也就是说,脚本中所有对环境的改变在脚本执行完毕后仍然有效。
如下图PID(进程ID)
总结描述:上述实验我通过创建一个脚本,执行睡眠的命令,通过另一个标签查看进程ID,可以看到前三种执行方式,会在后面新建一个子进程,而后者两种就在自己的进程中执行。
四.shell解释器在哪
查看路径 cat /etc/shells 或 chsh -l 查看当前使用的shell用 echo $SHELL
-
/bin/sh: 这通常是一个链接,指向系统中默认的 shell。在许多系统中,它可能链接到 Bash 或其他 shell 的变体,如 Dash 或者 Bourne shell (sh)。
-
/bin/bash: Bash shell 的标准路径。Bash 是一个常见的 Unix shell,也是许多 Linux 系统默认的 shell。
-
/usr/bin/sh: 一些系统中的备用 shell 路径。它可能链接到系统默认的 shell,也可能是其他的 shell,取决于系统的配置。
-
/usr/bin/bash: 另一个 Bash shell 的常见路径。通常,
/bin/bash
和/usr/bin/bash
是相同的文件的两个硬链接。 -
/bin/tcsh: Tcsh 是 C shell (csh) 的变体,它提供了许多与 C shell 类似的功能,并添加了一些新特性。它通常用于交互式的命令行操作。
-
/bin/csh: C shell 是一种 Unix shell,具有类似 C 编程语言的语法。它在一些 Unix-like 系统中作为默认 shell,但在许多系统中已经被其他更现代的 shell 取代了。
#命令格式
chsh [选项] [参数]
-s : 指定要更改为的新 shell。用户可以通过指定 shell 的路径或简单地指定 shell 的名称来进行选择。
-l : 列出系统上可用的 shell。这可以帮助用户查看可以作为新 shell 的选项。
-u : 显示关于如何使用 chsh 命令的帮助信息。
-v : 显示 chsh 命令的版本信息。
#例:将用户"testuser"的登录shell更改为/bin/bash
chsh -s /bin/bash testuser