-
shell
(計算機殼層)
鎖定
- 中文名
- 殼
- 外文名
- shell
- 性 質
- 命令解析器
- 用 途
- 接收用户命令
目錄
- 1 術語
- ▪ Shell的分類
- ▪ 交互式shell和非交互式shell
- ▪ Unix shell的類型
- ▪ Windows Powershell
- 2 常用命令
- 3 用途
- 4 描述
- 5 示例
- 6 文件
- 7 Visual Basic語句
shell術語
同時它又是一種程序設計語言。作為命令語言,它交互式解釋和執行用户輸入的命令或者自動地解釋和執行預先設定好的一連串的命令;作為程序設計語言,它定義了各種變量和參數,並提供了許多在高級語言中才具有的控制結構,包括循環和分支。
shellShell的分類
基本上shell分兩大類:
一:圖形界面shell
(Graphical User Interface shell 即 GUI shell)
例如:應用最為廣泛的Windows Explorer(微軟的Windows系列操作系統),還有也包括廣為人知的Linux shell,其中Linux shell包括X Window Manager(BlackBox和FluxBox),以及功能更強大的CDE、GNOME、KDE、 Xfce。
二:命令行式shell
(Command Line Interface shell ,即CLI shell)
例如:
Windows PowerShell(支持.NET Framework技術的Windows NT)
傳統意義上的shell指的是命令行式的shell,以後如果不特別註明,shell是指命令行式的shell。
文字操作系統與外部最主要的接口就叫做shell。shell是操作系統最外面的一層。shell管理與操作系統之間的交互:等待你輸入,向操作系統解釋你的輸入,並且處理各種各樣的操作系統的輸出結果。
shell提供了你與操作系統之間通訊的方式。這種通訊可以以交互方式(從鍵盤輸入,並且可以立即得到響應),或者以shell script(非交互)方式執行。shell script是放在文件中的一串shell和操作系統命令,它們可以被重複使用。本質上,shell script是命令行命令簡單的組合到一個文件裏面。
Shell基本上是一個命令解釋器,類似於DOS下的COMMAND.COM。它接收用户輸入的命令(如ls等),然後調用相應的應用程序。較為通用的shell有標準的Bourne shell和C Shell。
shell交互式shell和非交互式shell
交互式模式就是shell等待用户的輸入,並且執行用户提交的命令。這種模式被稱作交互式是因為shell與用户進行交互。這種模式也是大多數用户非常熟悉的:登錄、執行一些命令、簽退。當用户簽退後,shell也終止了。
shell也可以運行在另外一種模式:非交互式模式。在這種模式下,shell不與用户進行交互,而是讀取存放在文件中的命令,並且執行它們。當它讀到文件的結尾,shell也就終止了。
shellUnix shell的類型
在UNIX中主要有:
Bourne shell(sh)
Bourne Again shell(bash)
POSIX shell(sh)
C shell(csh)
TENEX/TOPS C shell(tcsh)
Bourne Shell(sh)
首個重要的標準Unix Shell是1979年底在V7 Unix(AT&T第7版)中引入的,並且以它的創始科技部基礎條件平台“國家氣象網絡計算應用節點建設”(2004DKA50730)資助者Stephen Bourne的名字命名。Bourne shell 是一個交換式的命令解釋器和命令編程語言。Bourne shell可以運行為login shell或者login shell的子shell(subshell)。只有login命令可以調用Bourne shell作為一個login shell。此時,shell先讀取/etc/profile文件和$HOME/.profile文件。/etc/profile文件為所有的用户定製環境,$HOME/.profile文件為本用户定製環境。最後,shell會等待讀取你的輸入。
C shell(csh)
Bill Joy於20世紀80年代早期,在加利福尼亞大學伯克利分校開發了csh。它主要是為了讓用户更容易地使用交互式功能,並把ALGOL風格的語法結構變成了C語言風格。它新增了命令歷史、別名、文件名替換、作業控制等功能。
Korn Shell(ksh)
有很長一段時間,只有兩類shell供人們選擇——Bourne shell用來編程,csh用來交互。為了改變這種狀況,AT&T貝爾實驗室的David Korn開發了ksh。ksh結合了所有的C shell的交互式特性,並融入了Bourne shell的語法。因此,ksh廣受用户的歡迎。它還新增了數學計算,進程協作(coprocess)、行內編輯(inline editing)等功能。ksh是一個交互式的命令解釋器和命令編程語言。它符合POSIX——一個操作系統的國際標準。POSIX不是一個操作系統,而是一個目標在於應用程序的移植性的標準——在源程序一級跨越多種平台。
Bourne Again Shell(bash)
bash是GNU計劃的一部分,用來替代Bourne shell。它用於基於GNU的系統如Linux。大多數的Linux(Red Hat、Slackware、Caldera)都以bash作為缺省的shell,並且運行sh時,其實調用的是bash。
POSIX Shell(sh)
POSIX shell是Korn shell的一個變種. 當前提供POSIX shell的最大賣主是Hewlett-Packard。在HP-UX 11.0,POSIX shell 就是/bin/sh,而bsh是/usr/old/bin/sh。
各主要操作系統下缺省的shell:
AIX下是Korn Shell。
Solaris缺省的是Bourne shell。
FreeBSD缺省的是C shell。
HP-UX缺省的是POSIX shell。
Linux是Bourne Again shell。
shellWindows Powershell
Windows PowerShell是一種新的交互式的命令行和基於任務腳本編寫技術,它使信息技術(IT)管理員能夠全面地自動操作和控制系統管理任務,從而提高了管理員的生產力。Windows PowerShell包括多個系統管理實用工具、一致的語法和命名慣例、及對普通管理數據更好地導航,如登記、證書存儲或Windows Management Instrumentation(WMI)。Windows PowerShell還專門針對IT管理,提供直觀的腳本編寫語言。
shell常用命令
命令 | 備註 | 適用於的命令解釋程序 |
cat [文件名] | 輸出文件內容到基本輸出(屏幕 or 加>fileName 到另一個文件) | |
cb | 格式化源代碼 | Unix、類unix |
改變文件的權限 | Unix、類unix | |
複製文件 | MULTICS、Unix、類unix、Haiku操作系統 | |
當前的時間和日期 | Unix、類unix、Haiku操作系統 | |
echo $abc | 在變量賦值之後,只需在變量前面加一個$去引用。 | Unix、類unix、Haiku操作系統、Windows Powershell |
語法檢查程序 | Unix、類unix、Haiku操作系統 | |
列出文件目錄 | MULTICS、Unix、類unix、Haiku操作系統、Windows Powershell | |
dir | 列出文件目錄 | |
man | 查詢命令 | Unix、類unix、Haiku操作系統 |
查看文本文件內容 | Unix、類unix、Haiku操作系統 | |
查看磁盤空間狀況 | Unix、類unix、Haiku操作系統 | |
查看當前操作系統名稱或版本號 | Unix、類unix | |
who
[2]
| 你的用户名和終端類型 定義變量 name | Unix、類unix |
查看當前進程狀況 =abc? (bash/pdksh) || set name = abc (tcsh) | Unix、類unix、Haiku操作系統 | |
改文件名/移動文件 | Unix、類unix、Haiku操作系統 | |
顯示目錄路徑命令 | Unix、類unix | |
exit | Unix、類unix | |
登出 | ||
刪除文件 | Unix、類Unix、Haiku操作系統 | |
echo [文本] | 顯示指定文本 | |
help [命令] | 列出一個命令的詳細信息 | Cygwin、Windows NT |
關機 | Unix、類unix、Windows NT、React OS | |
更改工作目錄 | Unix、類unix、Haiku操作系統、OS/2、Windows、React OS;DOS從2.0版起 | |
更改工作目錄 | Unix、類unix、Haiku操作系統、OS/2、Windows、React OS;DOS從2.0版起 | |
刪除目錄 | Unix、類unix、Haiku操作系統 | |
創建目錄 | Unix、類unix、Haiku操作系統、OS/2、Windows、React OS;DOS從2.0版起 | |
複製文件 | DOS、OS/2、Windows、React OS | |
DIR
[3]
| 列出目錄 | OpenVMS、DOS、OS/2、Windows、React OS |
列出命令 | CP/M、DR-DOS、OS/2、Windows、React OS | |
顯示文本文件的內容 | ||
VER | 查看當前操作系統名稱或版本號 | DOS、OS/2、Windows 9x、Windows NT cmd.exe、React OS |
刪除目錄 | OS/2、Windows、React OS;DOS從2.x版起 | |
創建目錄 | OS/2、Windows、React OS;DOS從2.x版起 | |
刪除目錄 | OS/2、Windows、React OS;DOS從2.x版起 | |
刪除目錄 | DOS、Windows 9x | |
刪除文件 | DOS、OS/2、Windows、React OS | |
改文件夾名(Windows NT);改文件名 | DOS、OS/2、Windows、React OS | |
改文件夾名(Windows NT);改文件名 | DOS、OS/2、Windows、React OS | |
EXIT | 關閉當前cmd.exe窗口 | Windows NT、React OS |
更改日期 | DOS、OS/2、Windows、React OS | |
移動文件 | DOS、OS/2、Windows、React OS | |
更改時分秒 | DOS、OS/2、Windows、React OS | |
更改提示符 | DOS、OS/2、Windows 9x、Windows NT cmd.exe、React OS | |
格式化一個分區 | DOS、OS/2、Windows、React OS | |
DOS、OS/2、Windows 9x、Windows NT cmd.exe、React OS | ||
ECHO ON | 顯示提示符 | Windows NT cmd.exe |
ECHO OFF | 不顯示提示符 | Windows NT cmd.exe |
shell用途
使用用户的缺省憑證和環境執行shell。
在UEFI環境下,EFI的shell環境提供了一組豐富的擴展和增強的命令,在以後的計算機中,傳統的DOS界面將會被shell環境所取代,所有的.exe文件將不會在以後支持shell的環境中出現,取而代之的文件後綴是.efi。在shell環境下,分為IA-32和x64,32位的*.efi文件不能在x64的計算機中運行。
shell描述
shell命令重新初始化用户的登錄會話。當給出該命令時,就會重新設置進程的控制終端的端口特徵,並取消對端口的所有訪問。然後 shell 命令為用户把進程憑證和環境重新設置為缺省值,並執行用户的初始程序。根據調用進程的登錄用户標識建立所有的憑證和環境。
如果在可信路徑上調用shell命令,並且/etc/security/user文件中用户的path屬性沒有always值,那麼就不維護終端的可信環境。
注:shell命令不會重新設置用户的登錄標識。
安全性
文件訪問:
方式 文件
r /etc/passwdr /etc/group r /etc/security/audit/config r /etc/security/environ r /etc/security/limits r /etc/security/user
審計事件:
事件 信息
USER_Shell portname
shell示例
要在使用可信 shell(tsh)之後將會話重新初始化為缺省憑證和環境,請輸入:
shell
shell文件
/usr/bin/shell 包含 shell 命令。
/etc/security/user 包含用户的擴展屬性。
/etc/group 包含組標識。
/etc/security/audit/config 包含審計配置信息。
/etc/security/environ 定義用户的環境屬性。
/etc/security/limits 定義每個用户的進程資源限制。
由Donald Lewis Shell於1959年提出
[1]
,它屬於插入排序方法,是不穩定的排序方法。
示例如下:
//希爾排序兄弟們 #include "iostream.h" #include <process.h> //using namespace std;//使用命名空間時,要將頭文件中的.h去掉 #define N 50 void shell_sort(int a[],int len) { int h,i,j,temp; for(h=len/2; h>0; h=h/2)//控制增量 { for(i=h; i<len; i++)//這個for循環就是前面的直接插入排序 { temp=a[i]; for(j=i-h; (j>=0&&temp<a[j]); j-=h)//循環打印數組的每個元素 { a[j+h]=a[j]; } a[j+h]=temp; } } } void print_array(int a[], int len) { for(int i=0; i<len; i++) { cout<<a[i]<<""; } cout<<endl; } void main() { int a[N]; int b; int M; cout<<"請輸入要排序的數目"<<endl; cin>>M; cout<<"請輸入要排序的數"<<endl; for(int i=0;i<M;i++) { cin>>b; a[i]=b; } cout<<"beforeshellsort:"; print_array(a,M); shell_sort(a,M);//進行shell排序 cout<<"aftershellsort:"; print_array(a,M); //return0; system("pause"); }
這段代碼在Visual C++ 6.0下編譯通過
shellVisual Basic語句
shell含義
shell語法
Shell(pathname[,windowstyle])
Shell 函數的語法含有下面這些命名參數:
部分 | 描述 |
pathname | 必要參數。Variant (String),要執行的程序名,以及任何必需的參數或命令行變量,可能還包括目錄或文件夾,以及驅動器。 |
Windowstyle | 可選參數。Variant (Integer),表示在程序運行時窗口的樣式。如果 windowstyle 省略,則程序是以具有焦點的最小化窗口來執行的。 |
windowstyle 命名參數有以下這些值:
常量 | 值 | 描述 |
vbHide | 0 | 窗口被隱藏,且焦點會移到隱式窗口。 |
VbNormalFocus | 1 | 窗口具有焦點,且會還原到它原來的大小和位置。 |
VbMinimizedFocus | 2 | 窗口會以一個具有焦點的圖標來顯示。 |
VbMaximizedFocus | 3 | 窗口是一個具有焦點的最大化窗口。 |
VbNormalNoFocus | 4 | 窗口會被還原到最近使用的大小和位置,而當前活動的窗口仍然保持活動。 |
VbMinimizedNoFocus | 6 | 窗口會以一個圖標來顯示。而當前活動的的窗口仍然保持活動。 |
shell説明
如果Shell函數成功地執行了所要執行的文件,則它會返回程序的任務ID。任務ID是一個數值,用來指明正在運行的程序。如果Shell函數不能打開命名的程序,則會產生錯誤。
注意 缺省情況下,Shell函數是以異步方式來執行其它程序的。也就是説,用Shell啓動的程序可能還沒有完成執行過程,就已經執行到Shell函數之後的語句。
shell函數示例
示例一:
本示例使用Shell函數來完成一個用户指定的應用程序。
' 將第二個參數值設成1,可讓該程序以正常大小的窗口完成,並且擁有焦點。 Dim RetValRetVal = Shell("C:\WINDOWS\CALC.EXE", 1) ' 完成Calculator。
示例二:
使用shell腳本調用linux中當前時間,並記錄在log文件中,10秒後再次記錄時間。
date>>/tmp/data.log sleep10 date>>/tmp/data.log
- 參考資料
-
- 1. Computer Pioneers - Donald Lewis Shell .IEEE Computer Society History Committee website[引用日期2021-05-14]
- 2. UNIX command summary .www.bsd.org.2011-03-30[引用日期2021-05-25]
- 3. Conversion of DOS shell commands to UNIX shell commands .www.bsd.org.2007-09-19[引用日期2021-05-25]
- 4. MULTICS PROGRAMMER'S MANUAL COMMANDS AND ACTIVE FUNCTIONS .bitsavers.org[引用日期2021-07-18]
- 5. RDOS/DOS Command Line Interpreter .bitsavers.org[引用日期2021-07-18]
- 6. GCL Programmer's Manual .Bull On-line Support Portal[引用日期2021-07-18]
- 7. DEC Command Language (DCL): Some basic commands .Dept of Computing Sciences[引用日期2021-07-18]
- 8. Introduction to the OpenVMS Operating Environment : Digital Command Language .Dept of Computing Sciences[引用日期2021-07-18]
- 9. MSPM BX.1.00 .Multics.1968-10-29[引用日期2021-07-18]
- 10. Learning to use RDOS/DOS System .bitsavers.org[引用日期2021-07-18]
- 11. Chapter 6: The Digital Command Language | Engineering360 .Engineering360 - Industrial Products & Supplier Catalog Search[引用日期2021-07-18]
- 收起