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) 後台作業
當用戶需要在後台執行一個作業時,可以在作業命令的後面加上元字元「&」。用戶以該種方式輸入的作業命令都必須放在後台執行,同時並不影響用戶與終端的交互