命令行解释器(CLI)概念辨析

打印 上一主题 下一主题

主题 987|帖子 987|积分 2961

前言

本文是 联合网络资料 与 AI生成 的内容,感谢您抽出宝贵的时间阅读!欢迎品评指正!
命令行解释器概念图

graph TD;命令行解释器-->SHELL命令行解释器--包罗-->CMD命令行解释器--包罗-->owerShellPowerShell --向下兼容-->CMDSHELL[Shell 一个通用术语, 指代Unix-like体系上所有类型的命令行解释器]SHELL--包罗-->SHSHELL--包罗-->BASHBASH[BASH, 全称为Bourne Again Shell,是一种Shell]SH[sh, 即Bourne Shell, 最早的 Unix Shell,提供了基本的脚本功能]CMD--可实行-->.BAT[.BAT文件  和  .CMD文件]PowerShell--可实行-->.BATPowerShell--可实行-->.PS1[.PS1, 高级脚本]BASH--可实行-->.sh[.sh文件, 即Shell Script文件]SH--可实行-->.sh命令行解释器(Command-Line Interpreter)

命令行解释器(Command-Line Interpreter, CLI)是操纵体系中用于剖析和实行用户通过命令行输入的指令的步伐。它提供了一个文本界面,允许用户直接与操纵体系进行交互。差别的操纵体系有差别的命令行解释器,每个解释器都有其独特的功能和特性。
命令行解释器的主要功能


  • 命令剖析:担当用户输入的命令,并将其传递给操纵体系内核或其他相干组件实行。
  • 脚本支持:允许用户编写和实行脚本文件,以自动化一系列命令。
  • 情况变量管理:提供对情况变量的管理和操纵。
  • I/O 重定向:支持输入输出重定向,允许将命令的输出生存到文件或将文件内容作为命令输入。
  • 管道:允许将一个命令的输出作为另一个命令的输入,实现命令间的流水线处理。
  • 条件判断和循环控制:支持条件判断语句(如 if、case)和循环控制语句(如 for、while),以便编写复杂的脚本逻辑。
Shell

Shell 是一个通用术语,指的是用户与操纵体系内核之间的一个接口。它允许用户通过命令行输入指令,并将这些指令传递给操纵体系实行。Shell 不光可以解释和实行命令,还可以读取和实行存储在文件中的脚本。
主要特性:


  • 种类多样:有多种类型的 Shell,包括但不限于 Bourne Shell (sh)、C Shell (csh)、Korn Shell (ksh)、Z Shell (zsh) 和 Bash。
  • 功能基础:每个 Shell 都提供了一组基本的命令和功能,如变量定义、条件判断、循环控制等。
  • 兼容性:大多数 Shell 都遵照 POSIX 标准,以确保一定的兼容性。
Bash

Bash 是一个特定类型的 Shell,它是 Bourne Shell (sh) 的增强版本,由自由软件基金会(FSF)开辟。Bash 在保持与 Bourne Shell 兼容的同时,增长了很多新功能和改进。
主要特性:


  • 兼容性:完全向后兼容 Bourne Shell (sh),这意味着任何可以在 sh 中运行的脚本也可以在 Bash 中运行。
  • 增强功能:Bash 提供了很多额外的功能,如命令行编辑、命令汗青记录、作业控制、数组支持、高级 I/O 重定向等。
  • 广泛使用:由于其强盛的功能和良好的兼容性,Bash 成为了很多 Unix-like 体系的默认 Shell。
区别总结

特性Shell (通用)Bash (特定类型)定义用户与操纵体系内核之间的接口特定类型的 Shell,是 Bourne Shell 的增强版种类多种类型(如 sh, csh, ksh, zsh)只有一种,即 Bourne Again SHell兼容性各自有差别的兼容性和标准完全兼容 Bourne Shell (sh)功能基础命令和脚本功能增强的功能,如命令行编辑、汗青记录、数组等默认状态不一定作为默认 Shell很多 Unix-like 体系的默认 Shell扩展名.sh 文件通常是通用 Shell 脚本.sh 文件可以是 Bash 脚本,但通常用 .bashPowerShell 和 CMD(Command Prompt)都是 Windows 操纵体系中的命令行解释器,但它们在设计理念、功能特性以及使用场景上有明显的区别。以下是它们之间的具体对比:
CMD (Command Prompt)

概述


  • 类型:命令行解释器
  • 平台:Windows
  • 描述:CMD 是 Windows 上传统的命令行解释器,提供了一个文本界面,允许用户通过命令来实行各种操纵。
主要特性


  • 命令集:CMD 提供了一套特定的 Windows 命令集,如 dir(列出目录内容)、cd(改变当前目录)、copy(复制文件)等。
  • 脚本支持:CMD 支持批处理脚本(.bat 或 .cmd 文件),这些脚本包罗一系列可以在 CMD 中顺序实行的命令。
  • 扩展名:

    • .bat:批处理脚本文件。
    • .cmd:与 .bat 类似,但有时行为略有差别,特别是在某些早期版本的 Windows 中。

  • 功能限制:CMD 的功能相对简单,主要用于基本的命令行操纵和简单的批处理脚本编写。
示例
  1. @echo off
  2. echo Hello, World!
  3. pause
复制代码
这个批处理脚本在 CMD 中运行时会输出 "Hello, World!" 并暂停等待用户按键继续。
PowerShell

概述


  • 类型:任务自动化和设置管理框架
  • 平台:Windows(也可在 Linux 和 macOS 上运行)
  • 描述:PowerShell 是一种更现代、功能更强盛的命令行解释器和脚本语言,旨在提高 Windows 体系管理和自动化任务的效率。
主要特性


  • 命令集:PowerShell 使用的是基于对象的命令集,称为 Cmdlets(发音为 "command-lets")。Cmdlets 通常以动词-名词的形式命名,如 Get-ChildItem(相当于 CMD 中的 dir)。
  • 脚本支持:PowerShell 支持高级脚本编写,包括条件判断、循环控制、函数定义、模块化编程等。脚本文件通常使用 .ps1 扩展名。
  • 扩展名:

    • .ps1:PowerShell 脚本文件。
    • .psm1:PowerShell 模块文件。
    • .psd1:PowerShell 数据文件。

  • 功能增强:

    • 面向对象:PowerShell 处理的是对象而不是纯文本,这使得数据处理更加灵活和强盛。
    • 远程管理:支持远程命令实行和会话管理,便于大规模体系管理。
    • 模块化:支持导入和导出模块,方便功能扩展和代码重用。
    • 跨平台:PowerShell Core 可以在 Windows、Linux 和 macOS 上运行。

示例

以下是一个简单的 PowerShell 脚本示例,演示怎样使用条件判断和循环控制:
  1. # 输出当前日期
  2. Write-Output "Today is $(Get-Date)"
  3. # 定义一个变量
  4. $greeting = "Hello, World!"
  5. # 使用变量
  6. Write-Output $greeting
  7. # 条件判断
  8. if ($env:USERNAME -eq "Administrator") {
  9.     Write-Output "You are the Administrator user."
  10. } else {
  11. .Disclaimer
  12. 请注意,上述示例中的最后一个 `else` 分支没有闭合。以下是完整的示例:
  13. ```powershell
  14. # 输出当前日期
  15. Write-Output "Today is $(Get-Date)"
  16. # 定义一个变量
  17. $greeting = "Hello, World!"
  18. # 使用变量
  19. Write-Output $greeting
  20. # 条件判断
  21. if ($env:USERNAME -eq "Administrator") {
  22.     Write-Output "You are the Administrator user."
  23. } else {
  24.     Write-Output "You are not the Administrator user."
  25. }
  26. # 循环控制
  27. for ($i = 1; $i -le 5; $i++) {
  28.     Write-Output "Loop iteration: $i"
  29. }
复制代码
CMD 和 PowerShell 的主要区别

特性CMD (Command Prompt)PowerShell平台仅限 WindowsWindows、Linux、macOS命令集Windows 特定命令(如 dir, copy, move)基于对象的 Cmdlets(如 Get-ChildItem)脚本支持批处理脚本(.bat, .cmd)高级脚本(.ps1),支持模块化编程扩展名.bat, .cmd.ps1, .psm1, .psd1功能特性基础命令行操纵和简单的批处理脚本面向对象、远程管理、模块化编程、跨平台支持数据处理处理纯文本处理对象,数据处理更加灵活和强盛远程管理不支持支持远程命令实行和会话管理跨平台能力仅限 Windows支持 Windows、Linux、macOS怎样确定当前shell类型

要查看当前正在使用的命令行解释器(Shell)的类型,可以通过多种方法来确定。以下是几种常见的方法:
方法一:使用 echo $SHELL

$SHELL 情况变量通常包罗用户登录时默认 Shell 的路径。不外需要注意的是,这个变量显示的是用户的登录 Shell,而不是当前会话中现实运行的 Shell。
  1. echo $SHELL
复制代码
例如,输出可能是:
  1. /bin/bash
复制代码
  1. /bin/dash
复制代码
方法二:使用 ps 命令

你可以使用 ps 命令来查看当前进程及其父进程,从而确定当前 Shell 的类型。
  1. ps -p $$
复制代码
这里的 $$ 是一个特别的 Shell 变量,表现当前 Shell 的进程 ID (PID)。ps -p $$ 会显示当前 Shell 的信息。
  1.   PID TTY          TIME CMD
  2. 1234 pts/0    00:00:00 bash
复制代码
在这个例子中,当前 Shell 是 bash。
方法三:使用 readlink 或 realpath 查找符号链接
  1. readlink -f /proc/$$/exe
复制代码
方法四:检查 $0 变量

在某些 Shell 中,特别变量 $0 包罗了当前 Shell 的名称或路径。
  1. echo $0
复制代码
POSIX

POSIX(Portable Operating System Interface, 可移植操纵体系接口)是由 IEEE(电气和电子工程师协会)制定的一系列标准,旨在提高差别 Unix 操纵体系之间的兼容性和可移植性。POSIX 标准定义了操纵体系接口和工具的行为规范,使得开辟者可以编写在多种符合 POSIX 标准的操纵体系上运行的应用步伐。
POSIX 的目标


  • 可移植性:确保应用步伐可以在差别的 Unix 体系之间轻松移植。
  • 互操纵性:使差别的操纵体系和工具可以或许相互协作。
  • 标准化:为操纵体系接口、命令行解释器(Shell)、实用工具等提供一致的规范。
主要 POSIX 标准

POSIX 包罗多个子标准,涵盖了操纵体系接口的差别方面:

  • POSIX.1 (IEEE Std 1003.1)
    这是最核心的标准,定义了操纵体系的基本接口和服务,包括:


  • 体系调用接口:如文件操纵(open, read, write, close 等)、进程控制(fork, exec, exit 等)。
  • 库函数:如标准 I/O 库(fopen, fprintf, fclose 等)。
  • Shell 和工具:定义了 Shell 和常见命令行工具(如 sh, grep, sed, awk 等)的行为。

  • POSIX.2 (IEEE Std 1003.2)
    定义了命令行解释器(Shell)和常用工具的行为规范,确保脚本和命令在差别体系上的兼容性。
  • POSIX.3 (IEEE Std 1003.3)
    定义了测试方法和一致性测试套件,用于验证明现是否符合 POSIX 标准。
  • POSIX.4 (IEEE Std 1003.4)
    定义了及时扩展,包括信号处理、定时器、线程等。
  • POSIX.1b (IEEE Std 1003.1b)
    进一步扩展了 POSIX.1,增长了更多及时功能,如线程、信号量、共享内存等。
  • POSIX.1c (IEEE Std 1003.1c)
    定义了线程接口(Pthreads),包括线程创建、同步机制(如互斥锁、条件变量)等。
  • POSIX.1d (IEEE Std 1003.1d)
    进一步扩展了 POSIX.1,增长了更多及时功能,如优先级调治、及时信号等。
  • POSIX.1e (IEEE Std 1003.1e)
    定义了安全扩展,包括访问控制列表(ACLs)、审计等功能。
  • POSIX.1g (IEEE Std 1003.1g)
    定义了网络编程接口,包括套接字(sockets)和网络协议栈的规范。
POSIX 兼容性

为了确保应用步伐在差别操纵体系上的兼容性,很多操纵体系实现了部分或全部 POSIX 标准。以下是一些常见的 POSIX 兼容操纵体系:

  • Linux:大多数 Linux 发行版都高度兼容 POSIX 标准,特别是核心体系调用和命令行工具。
  • macOS:Apple 的 macOS 操纵体系也广泛支持 POSIX 标准,特别是在命令行工具和体系调用方面。
  • FreeBSD:一个开源的 Unix 操纵体系,广泛支持 POSIX 标准。
  • AIX、HP-UX、Solaris:这些商业 Unix 操纵体系也支持 POSIX 标准。
常见的 POSIX 工具和接口

POSIX 标准涵盖了很多常用的工具和接口,以下是其中一些重要的例子:

  • Shell
    POSIX 定义了一个标准的 Shell (sh),确保脚本在差别体系上的兼容性。虽然现代体系中 /bin/sh 可能指向差别的实现(如 bash 或 dash),但它们通常都兼容 POSIX 标准。
  • 常用命令
    POSIX 标准定义了一些常用命令的行为,如:


  • ls:列出目录内容
  • cp:复制文件
  • mv:移动或重命名文件
  • rm:删除文件
  • grep:文本搜索工具
  • sed:流编辑器
  • awk:文本处理语言

  • 体系调用
    POSIX 定义了基本的体系调用接口,如:


  • 文件操纵:open, read, write, close
  • 进程控制:fork, exec, exit
  • 信号处理:kill, signal

  • 库函数
    POSIX 定义了一些标准库函数,如:


  • 标准 I/O 库:fopen, fprintf, fclose
  • 字符串处理:strcpy, strcat, strcmp
  • 内存管理:malloc, free
怎样检查 POSIX 兼容性

假如你想检查某个工具或命令是否符合 POSIX 标准,可以参考以下资源:

  • POSIX 规范文档:IEEE 提供了具体的 POSIX 标准文档,你可以查阅具体的规范要求。
  • IEEE Std 1003.1
  • POSIX 测试套件:一些构造提供了 POSIX 兼容性测试套件,可以帮助你验证体系的兼容性。
  • Open Group's POSIX Test Suite
  • 使用 man 页面:很多 Unix-like 体系提供了具体的 man 页面,说明每个命令和库函数的行为。你可以通过查看 man 页面来确认其行为是否符合 POSIX 标准。 例如,查看 grep 命令的 POSIX 兼容性:
  1. man grep
复制代码
总结

POSIX 标准是 Unix-like 操纵体系的重要构成部分,它通过定义统一的接口和工具行为,提高了应用步伐的可移植性和互操纵性。了解 POSIX 标准有助于开辟者编写跨平台的应用步伐,并确保脚本和命令在差别体系上的兼容性。常见的 POSIX 兼容操纵体系包括 Linux、macOS 和各种 Unix 体系,它们实现了 POSIX 标准中的大部分功能。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

吴旭华

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表