1. 命令行解释器的字符语法定义
&[...]Command1&Command2用来分隔一个命令行中的多个命令。Cmd.exe运行第一个命令,然后运行第二个命令。
&&[...]Command1&&Command2只有在符号&&前面的命令成功时,才运行该符号后面的命令。Cmd.exe运行第一个命令,然后只有在第一个命令运行成功时才运行第二个命令。
||[...]Command1||Command2只有在符号||前面的命令失败时,才运行符号||后面的命令。Cmd.exe运行第一个命令,然后只有在第一个命令未能运行成功(接收到大于零的错误代码)时才运行第二个命令。
()[...](Command1&Command2)用来分组或嵌套多个命令。
;或者,Command1Parameter1;Parameter2用来分隔命令参数。
要嵌套命令行解释器,请在命令提示符下键入:
cmd
出现类似于下面内容的消息:
Microsoft(R)(TM)(C)版权所有1985-2002MicrosoftCorp.要关闭嵌套的命令行解释器,请键入exit。
使用setlocal和endlocal命令,可以在Cmd.exe的实例中(或在脚本中)进一步将更改局部化。setlocal创建局部作用范围,而endlocal终止局部作用范围。在setlocal和endlocal作用范围内所做的更改将会被放弃,从而保持原始环境不变。这两个命令的嵌套最高可达到32级。
将环境变量与Cmd.exe一起使用
Cmd.exe命令行解释器环境由确定命令行解释器和操作系统行为的变量进行定义。可以使用两种类型的环境变量(系统和局部)来定义命令行解释器环境或整个操作系统环境的行为。系统环境变量定义全局操作系统环境的行为。局部环境变量定义Cmd.exe当前实例环境的行为。
系统环境变量预置于操作系统之中,并可用于所有Windows服务器操作系统进程。只有具有管理凭据的用户才可以更改系统变量。这些变量最常用于登录脚本。
2. windows系统的命令解释器是cmd.exe那linux的命令解释器是什么
linux的命令解释器叫shell,但linux又有多种不同的shell,常见的有Bourne shell(简称sh),C shell(简称csh),Korn shell(简称ksh)和Bourne Again shell(简称bash)。
ubuntu默认的shell是bash。
而且还有几种不同的终端,但命令和脚本还是由shell来解释和执行的。终端与shell没有对应关系
3. 什么是命令行解释器
命令行解释器概述命令行解释器是一个单独的软件程序,它可在用户和操作系统之间提供直接的通讯。非图形命令行解释器用户界面提供运行基于字符的应用程序和实用程序的环境。通过使用类似于 MS-DOS 命令解释程序 Command.com 的各个字符,命令行解释器执行程序并在屏幕上显示其输出。Windows XP 命令行解释器使用命令解释程序 Cmd.exe(该程序加载应用程序并指导应用程序之间的信息流动)将用户输入转换为操作系统可理解的形式。
可以使用命令行解释器创建和编辑可自动执行常规任务的批处理文件(也称作脚本)。例如,可以使用脚本自动管理用户帐户或夜间备份。也可以使用 Windows 脚本主机,即 CScript.exe,在命令行解释器中运行更为复杂的脚本。通过使用批处理文件来执行操作,可比使用用户界面来执行操作能更为有效。批处理文件接受命令行上可用的所有命令。有关批处理文件和脚本的详细信息,请参阅使用批处理文件。
可以自定义命令提示符窗口以易于查看和增强对运行程序方式的控制。有关自定义命令提示符窗口的详细信息,请参阅配置命令提示符。
使用命令语法
语法按必须键入命令及其带有参数的顺序出现。下面的 x 命令范例显示各种语法文本格式:
x Source [Destination] [/w] [/p] [/c] [/v] [/q] [/f] [/l] [/g] [/d[:mm-dd-yyyy]] [/u] [/i] [/s [/e]] [/t] [/k] [/r] [/h] [{/a|/m}] [/n] [/o] [/x] [/exclude:file1[+[file2]][+[file3]] [{/y|/-y}] [/z]
下表说明如何解释不同的文本格式。
格式化图例
格式 含义
斜体 用户必须提供的信息
粗体 用户必须像显示的一样准确键入的元素
省略号 (...) 可在命令行中重复多次的参数
在括号 ([]) 之间 可选项目
在大括号 ({}) 之间;将选项用竖线 (|) 隔开。例如:{even|odd} 用户必须从中只选择一个选项的选项组
Courier 字体 代码或程序输出
使用多个命令和条件处理符号
使用条件处理符号可以从单个命令行或脚本运行多个命令。通过条件处理符号运行多个命令时,条件处理符号右边的命令根据条件处理符号左边的命令结果来发挥作用。例如,只有在前一个命令失败的情况下,才可能需要运行一个新命令。或者,只有在前一个命令成功时才可能需要运行一个新命令。
可以使用下表列出的特殊字符来传递多个命令。
字符 语法 定义
& [...] command1 & command2 用来分隔一个命令行中的多个命令。Cmd.exe 运行第一个命令,然后运行第二个命令。
&& [...] command1 && command2 只有在符号 && 前面的命令成功时,才用于运行该符号后面的命令。Cmd.exe 运行第一个命令,然后只有在第一个命令运行成功时才运行第二个命令。
|| [...] command1 || command2 只有在符号 || 前面的命令失败时,才用于运行符号 || 后面的命令。Cmd.exe 运行第一个命令,然后只有在第一个命令未能运行成功(接收到大于零的错误代码)时才运行第二个命令。
( ) [...] (command1 & command2) 用来分组或嵌套多个命令。
; 或者 , command1 parameter1;parameter2 用来分隔命令参数。
注意
“与”符号 (&)、管道符号 (|) 以及括号 () 是特殊字符,将它们作为参数传递时,必须在其前面加上转义字符 (^) 或引号。
如果某个命令成功完成操作,则该命令就返回零 (0) 退出代码或不返回任何退出代码。有关退出代码的详细信息,请参阅 Microsoft Windows Resource Kit。
嵌套命令行解释器
通过在命令提示符打开 Cmd.exe 新的实例,可以在 Cmd.exe 内嵌套命令行解释器。默认情况下,Cmd.exe 的每个实例继承其父 Cmd.exe 应用程序的环境。通过嵌套 Cmd.exe 的实例,可以更改本地环境,而不会影响 Cmd.exe 的父应用程序。这使您能够保留 Cmd.exe 的原始环境,并在终止嵌套的命令行解释器之后返回到原始环境。但是在嵌套的命令行解释器中所作的更改将不会被保存。
要嵌套命令行解释器,请在命令提示符下键入:
cmd
显示类似于下面内容的消息:
Microsoft (R) Windows XP (TM)
(C) Copyright 1985-2001 Microsoft Corp.
要关闭嵌套的命令行解释器,请键入 exit。
使用 setlocal 和 endlocal 命令,甚至可以在 Cmd.exe 的实例中(或在脚本中)进一步将更改本地化。Setlocal 创建本地作用范围,而 endlocal 终止本地作用范围。在 setlocal 和 endlocal 作用范围内所作的更改将会被放弃,从而保持未更改的原始环境。可以将这两个命令嵌套到最高 32 级。有关 setlocal 和 endlocal 命令的详细信息,请参阅 Setlocal 和 Endlocal。
将环境变量与 Cmd.exe 一起使用
Cmd.exe 命令行解释器环境由确定命令行解释器和操作系统的行为的变量进行定义。可以使用两种类型的环境变量(系统和本地)来定义命令行解释器环境或整个操作系统环境的行为。系统环境变量定义全局操作系统环境的行为。本地环境变量定义 Cmd.exe 当前实例的环境的行为。
系统环境变量存在于操作系统之中,并可用于所有 Windows XP 进程。只有具有管理特权的用户才可以更改系统变量。这些变量最常用于登录脚本。
只有在为其创建了本地环境变量的用户登录到计算机时,这些本地环境变量才有效。HKEY_CURRENT_USER 配置单元 中设置的本地变量只对当前用户有效,但它们可定义全局操作系统环境的行为。
下表按降序顺序描述各种类型的变量:
内置系统变量
在 HKEY_LOCAL_MACHINE 配置单元中找到的系统变量
在 HKEY_CURRENT_USER 配置单元中找到的局部变量
在 Autoexec.bat 文件中设置的所有环境变量和路径
在登录脚本(如果有的话)中设置的所有环境变量
在脚本和批处理文件中交互使用的变量
在命令行解释器中,Cmd.exe 的每个实例都继承其父应用程序的环境。因此,可以在不影响父应用程序环境的情况下更改新的 Cmd.exe 环境中的变量。
下表列出 Windows XP 的系统和局部环境变量。
变量 类型 说明
%ALLUSERSPROFILE% 局部 返回所有“用户配置文件”的位置。
%APPDATA% 局部 返回默认情况下应用程序存储数据的位置。
%CD% 局部 返回当前目录字符串。
%CMDCMDLINE% 局部 返回用来启动当前的 Cmd.exe 的准确命令行。
%CMDEXTVERSION% 系统 返回当前的“命令处理程序扩展”的版本号。
%COMPUTERNAME% 系统 返回计算机的名称。
%COMSPEC% 系统 返回命令行解释器可执行程序的准确路径。
%DATE% 系统 返回当前日期。使用与 date /t 命令相同的格式。由 Cmd.exe 生成。有关 date 命令的详细信息,请参阅 Date。
%ERRORLEVEL% 系统 返回最近使用过的命令的错误代码。通常用非零值表示错误。
%HOMEDRIVE% 系统 返回连接到用户主目录的本地工作站驱动器号。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。
%HOMEPATH% 系统 返回用户主目录的完整路径。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。
%HOMESHARE% 系统 返回用户的共享主目录的网络路径。基于主目录值的设置。用户主目录是在“本地用户和组”中指定的。
%LOGONSEVER% 局部 返回验证当前登录会话的域控制器的名称。
%NUMBER_OF_PROCESSORS% 系统 指定安装在计算机上的处理器的数目。
%OS% 系统 返回操作系统的名称。Windows 2000 将操作系统显示为 Windows_NT。
%PATH% 系统 指定可执行文件的搜索路径。
%PATHEXT% 系统 返回操作系统认为可执行的文件扩展名的列表。
%PROCESSOR_ARCHITECTURE% 系统 返回处理器的芯片体系结构。值: x86,IA64。
%PROCESSOR_IDENTFIER% 系统 返回处理器说明。
%PROCESSOR_LEVEL% 系统 返回计算机上安装的处理器的型号。
%PROCESSOR_LEVEL% 系统 返回处理器的版本号。
%PROMPT% 局部 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。
%RANDOM% 系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。
%SYSTEMDRIVE% 系统 返回包含 Windows XP 根目录(即系统根目录)的驱动器。
%SYSTEMROOT% 系统 返回 Windows XP 根目录的位置。
%TEMP% and %TMP% 系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP,而其它应用程序则需要 TMP。
%TIME% 系统 返回当前时间。使用与 time /t 命令相同的格式。由 Cmd.exe 生成。有关 time 命令的详细信息,请参阅 Time。
%USERDOMAIN% 局部 返回包含用户帐户的域的名称。
%USERNAME% 局部 返回当前登录的用户的名称。
%UserPrefix% 局部 返回当前用户的配置文件的位置。
%WINDIR% 系统 返回操作系统目录的位置。
设置环境变量
使用 set 命令创建、更改、删除或显示环境变量。set 命令只更改当前解释器环境中的变量。
要查看变量,请在命令提示符下键入:
set all
要添加变量,请在命令提示符下键入:
set variablename=value
要删除变量,请在命令提示符下键入:
set [no]d2
可以将大多数字符用作变量值,其中包括空格。如果使用特殊字符 <、>、|、& 或 ^,则必须在它们前面加上转义字符 (^) 或引号。如果使用引号,则必须将引号作为值的组成部分,因为等号后面的任何内容都会被视为值。请考虑下列范例:
要创建变量值 new&name,请键入:
set varname=new^&name
要创建变量值 "new&name",请键入:
set varname="new&name"
如果在命令提示符下键入 set varname=new&name,就会出现与下面内容类似的错误消息:
"name is not recognized as an internal or external command, operable program or batch file."
变量名不区分大小写。但是,set 显示的变量与您键入的完全相同。可以在变量名中结合使用大写字母和小写字母,这样可以使代码更具有可读性(例如, UserName)。
注意
最大单个环境变量大小为 8192 字节。
所有变量的最大环境变量的总和大小(包括变量名和等号)为 65,536 KB。
替换环境变量值
要在命令行或脚本中启用变量值替换,请将变量名包括在百分号之中(即,%variablename%)。使用百分号可以确保 Cmd.exe 引用变量值,而不是进行文字比较。为变量名定义变量值之后,请将变量名包括在百分号之中。Cmd.exe 搜索该变量名的所有实例,并用定义的变量值替换各个实例。例如,如果创建包含不同值(例如,用户名)的脚本,并且想要用这些值为每个用户定义 USERNAME 环境变量,可以使用包括在百分号之中的 USERNAME 来编写代码。运行此脚本时,Cmd.exe 就用变量值替换 %USERNAME%,这样就消除了为每个用户手动执行此任务的必要。变量替换是不可递归的。Cmd.exe 检查变量一次。有关变量替换的详细信息,请参阅 For 和 Call。
4. 命令解释器为什么经常与内核分开
内核负责提供最基本最主要的功能,是指操作系统中最核心的部分,主要提供系统服务、用户接口、文件系统、设备驱动等。
内核应该尽量简洁小巧。否则外部程序的错误就会可能使内核崩溃。
命令解释器与内核分开的话,对于命令解释器的好处是,设计一个单独的命令解释器要容易的多。事实上,已经有许多优秀的命令解释器了。
5. 什么是命令 行 解释器
就是执行命令用的,不同的操作系统有不同的解释器。
Window下也叫“命令提示符”,可以在开始运行那里输入CMD就会跳出来。
linux的命令解释器叫shell,但linux又有多种不同的shell,常见的有Bourne shell(简称sh),C shell(简称csh),Korn shell(简称ksh)和Bourne Again shell(简称bash)。
ubuntu默认的shell是bash。
而且还有几种不同的终端,但命令和脚本还是由shell来解释和执行的。终端与shell没有对应关系
6. 如何用C语言写一个shell命令解释器
支持的基本命令需求什么?你要做个cmd这样的来给你个1年估计都不够~
7. linux的shell命令解释器到底要做什么
shell是一个命令解释器。是计算机用户和计算机操作系统内核之间的翻译。计算机用户在操作计算机是输入的指令都是以人类语言来表示的。而计算机在内部进行信息处理是使用的都是二进制。所以shell会将用户的输入转换成计算机能够识别的信息。计算机处理完成后再有shell转换成人能够识别的信息输出。
8. 在Linux环境下模拟实现简单命令解释器
用别名来实现就行了,格式:ailas 你喜欢的别名="Linux 命令+参数"
如实现dir:alias dir="ls -la"
实现:alias ="cp"
实现del: alias del="rm -rf"
等等。
9. 命令解释器的用途是什么
“命令解释器”??是什么东西?
我想应该是“命令提示符”吧,如果是,那就是以前的MS DOS操作系统的一个缩小版,用来敲DOS命令的,你可以在“命令提示符”里输入help /?查看帮助的啊~~~
10. shell命令解释器源代码
要求实现一个简单的命令解释器,也就是linux中的shell程序,在本程序中我们将其起名为ysh,要求:
1、 能够执行外部程序命令,命令可以带参数;
2、 能够执行fg、bg、cd、history、exit等内部命令;
3、 使用管道和输入输出重定向;
4、 支持前后台作业,提供作业控制功能,包括打印作业的清单,改变当前运行作业的前/后台状态,以及控制作业的挂起、中止与继续运行;
5、 使用Make工具建立工程;
6、 使用调试器gdb来调试程序;
二、 实验现象:
本程序的ysh程序设计不包括对配置文件和命令行参数的支持。要求ysh提供一个命令提示符,如ysh>,表示接受用户输入,每次执行完成后,再打印下一个命令提示符ysh>,当用户没有输入时,ysh需要一直处于等待输入状态,同时在屏幕上显示一些必要的信息。
三、 Ysh解释程序的具体要求:
1、 外部命令和内部命令:
在大多数情况下,用户输入的命令是执行存储在文件系统下中的可执行程序,我们称之为外部命令或外部程序。Ysh应当支持在执行这些程序时可以将输入/输出重新定向到一个文件,并允许若干个程序使用管道串联起来。我们把由管道连接起来的符合命令以及单独使用的命令成为作业。
外部命令的形式是一系列分隔的字符串。第一个字符串可以是可执行程序的名字,其它的是传递给这个外部程序的参数。如果第一个字符串所声名的可执行文件并不存在或者不可执行,则认为这个命令是错误的。
解释器还必须支持一些内部命令,这些命令在ysh内部实现了特定的动作,下面是一些内部命令,如果用户提交了一个内部命令,ysh应按照下面的描述执行相应动作。
�8�5 exit:退出ysh。
�8�5 jobs:打印当前正在后台执行的作业和挂起的作业信息。输出信息应采用便于用户理解的格式。
�8�5 fg %<int>:把<int>所标识的作业放到前台运行,如果这个作业原来已经停止,那么他继续运行。Shell应当在打印新的命令提示行之前等待前台运行的子进程结束。
�8�5 Bg %<int>:在后台执行<int>标识的已挂起的进程。
2、 命令行:
当用户在提示符后面输入命令时,输入的整行内容叫做“命令行字符串”,ysh应当保存每一条命令行字符串,直到它表示的作业执行结束,其中包括后台作业和被挂起的作业。
3、 前台和后台作业
ysh应当能够执行前台和后台作业。Shell在前台执行结束之前要一直等待。而在开始执行后台作业时要立刻打印出提示符ysh>,让用户输入下一条命令。
前台作业的执行总是优先于一个后台作业,ysh不需要在打印下一个提示符前等待后台作业的完成,无论是否有后台作业的执行,只要完成一个前台作业,便立即输出提示符ysh>;一个后台作业结束时,ysh应当在作业结束后立刻打印出一条提示信息。
4、 特殊键:
又称组合键。通过终端驱动程序,特殊的组合键可以产生信号给ysh,程序应当对这些信号做出适当的响应。
�8�5 Ctrl + Z:产生SIGTSTP信号,这个信号不是挂起ysh,而是让shell挂起在前台运行的作业,如果没有任何前台作业,则该特殊键无效。
�8�5 Ctrl+C:产生SIGINT信号,这个信号不是中止ysh,而是通过ysh发出信号杀死前台作业中的进程。如果没有任何前台作业,则该特殊键无效。
5、 分析用户输入:
a) 分隔符和特殊字符
分析用户输入的语法分析器应具有下面介绍的功能,它能够检查用户的输入错误。如果用户输入的某些地方出错了,ysh应当给出合理的出错信息。
ysh每次接受用户输入的一行命令,在用户按下回车键(Enter)后开始执行分析动作。空名令不产生任何操作,而只是打印一个新的提示符。
定义空格符为分隔符,ysh应能处理命令行中间和前后出现的重复空格符。
某些字符被称做“元字符”,它们在用户输入的上下文中具有特殊的定义。这些字符包括”&、|、<、>”。Shell假设这些字符不会出现在程序名、参数名、文件名中,他们是ysh的保留字符。
b) 内部命令:
如果命令行字符串符合前面介绍的内部命令的格式,它就当作一个内部命令被解释。如果不是,就要考虑可能是外部程序的执行,或者是错误的。
c) I/O重定向:
一个程序命令后面可能还跟有元字符“<”或“>”,他们是重定向符号,而在重定向符号后面还跟着一个文件名,在”<”的情况下,程序的输入被重定向到一个指定的文件中去。在”>”的情况下,程序的输出被重定向到一个指定的文件中。如果输出文件不存在,需要创建一个输出文件。如果输入文件不存在,则认为出现了错误。
d) 管道和协同程序
在一条命令行中当若干个命令被元字符“|”分开时,这个元字符代表管道符号。在这种情况下,ysh为每一个子命令都创建一个进程,并把它们的输入、输出用管道连接起来。
例如下面这条命令行:
progA argA1 argA2 < infine | progB1 > outfile
应生成progA 和progB 两个进程,ProgA的输入来自文件infile,porgA的输出是progB的输入,并且progB的输出文件是outfile。这种命令行可以通过进程间通信中的管道来实现。
含有一个和多个管道的命令会在如下几种情况下产生错误:
�8�5 当其任何一个子程序执行出错时。
�8�5 除了第一个子程序以外其它子程序的输入被重定向。
�8�5 除了最后一个子程序以外的其它子程序的输出被重定向。
由管道连接的多个进程所组成的作业只有当其所有子进程都执行完毕后才算结束。
e) 后台作业
当用户需要在后台执行一个作业时,可以在作业命令的后面加上元字符“&”。用户以该种方式输入的作业命令都必须放在后台执行,同时并不影响用户与终端的交互