術語 同時它又是一種
程式設計語言 。作為命令語言,它互動式解釋和執行用戶輸入的命令或者自動地解釋和執行預先設定好的一連串的命令;作為程式設計語言,它定義了各種變數和參數,並提供了許多在
高級語言 中才具有的控制結構,包括循環和分支。
window7中包含的shell 基本上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)
例如:
bash / sh / ksh / csh(Unix/linux 系統)
Windows PowerShell(支持 .NET Framework 技術的 Windows NT 系統)
傳統意義上的shell指的是命令行式的shell,以後如果不特別註明,shell是指命令行式的shell。
文字作業系統與外部最主要的接口就叫做shell。shell是作業系統最外面的一層。shell管理你與作業系統之間的互動:等待你輸入,向作業系統解釋你的輸入,並且處理各種各樣的作業系統的輸出結果。
shell提供了你與作業系統之間通訊的方式。這種通訊可以以互動方式(從鍵盤輸入,並且可以立即得到回響),或者以shell script(非互動)方式執行。shell script是放在檔案中的一串shell和作業系統命令,它們可以被重複使用。本質上,shell script是命令行命令簡單的組合到一個檔案裡面。
Shell基本上是一個命令
解釋器 ,類似於
DOS 下的command。它接收用戶命令(如ls等),然後調用相應的應用程式。較為通用的shell有標準的Bourne shell (sh)和C shell (csh)。
互動式shell和非互動式shell
互動式模式就是shell等待你的輸入,並且執行你提交的命令。這種模式被稱作互動式是因為shell與用戶進行互動。這種模式也是大多數用戶非常熟悉的:登錄、執行一些命令、簽退。當你簽退後,shell也終止了。
shell也可以運行在另外一種模式:非互動式模式。在這種模式下,shell不與你進行互動,而是讀取存放在檔案中的命令,並且執行它們。當它讀到檔案的結尾,shell也就終止了。
shell的類型
Bourne shell (包括 sh,ksh,and bash)
Bourne shell ( sh)
Korn shell ( ksh)
Bourne Again shell ( bash)
POSIX shell ( sh)
C shell (包括 csh and tcsh)
C shell ( csh)
TENEX/TOPS C shell ( tcsh)
Bourne Shell
首個重要的標準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
Bill Joy於20世紀80年代早期,在伯克利的
加利福尼亞大學 開發了C shell。它主要是為了讓用戶更容易的使用互動式功能,並把ALGOL風格的語法結構變成了C語言風格。它新增了命令歷史、別名、檔案名稱替換、
作業控制 等功能。
Korn Shell
有很長一段時間,只有兩類shell供人們選擇,Bourne shell用來編程,C shell用來互動。為了改變這種狀況,AT&T的bell實驗室David Korn開發了Korn shell。ksh結合了所有的C shell的互動式特性,並融入了Bourne shell的語法。因此,Korn shell廣受用戶的歡迎。它還新增了數學計算,進程協作(coprocess)、行內編輯(inline editing)等功能。Korn Shell 是一個互動式的命令解釋器和命令程式語言.它符合POSIX——一個作業系統的國際標準.POSIX不是一個作業系統,而是一個目標在於應用程式的移植性的標準——在
源程式 一級跨越多種平台。
Bourne Again Shell (bash)
bash是
GNU 計畫的一部分,用來替代Bourne shell。它用於基於GNU的系統如Linux.大多數的Linux(Red Hat,Slackware,Caldera)都以bash作為預設的shell,並且運行sh時,其實調用的是bash。
POSIX Shell
POSIX shell 是Korn shell的一個變種. 當前提供POSIX shell的最大賣主是
Hewlett-Packard 。在HP-UX 11.0,POSIX shell 就是/bin/sh,而
bsh 是/usr/old/bin/sh.
各主要作業系統下預設的shell:
Linux 是Bourne Again shell.
Windows PowerShell 是一種新的互動式的命令行和基於任務腳本編寫技術,它使信息技術(IT) 管理員能夠全面地自動操作和控制系統管理任務,從而提高了管理員的生產力。Windows PowerShell 包括多個系統管理實用工具、一致的語法和命名慣例、及對普通管理數據更好地導航,如登記、證書存儲 或 Windows Management Instrumentation (WMI)。Windows PowerShell 還專門針對 IT 管理,提供直觀的
腳本編寫 語言。
Shell也是一個VB函式,它的作用是運行程式,語法是Shell(命令字元串[,視窗類型])
shell 命令 常用命令
cat 檔案名稱 輸出檔案內容到基本輸出(螢幕 or 加>fileName 到另一個檔案)
chmod //change mode,改變檔案的許可權
cp copy
date 當前的時間和日期
echo $abc 在變數賦值之後,只需在變數前面加一個$去引用.
ls dir
man help
more type
du 查看磁碟空間狀況
ps 查看當前進程狀況
who 你的用戶名和終端類型
定義變數 name=abc? (bash/pdksh) || set name = abc (tcsh)
mkdir 創建目錄
rmdir 刪除目錄
cd 進入目錄
rm 刪除檔案
more 顯示檔案
echo 顯示指定文本
mv 改檔案名稱 /移動檔案
pwd 顯示目錄路徑命令
用途 使用用戶的預設憑證和環境執行 shell。
在UEFI環境下,EFI的Shell環境提供了一組豐富的擴展和增強的命令,在以後的計算機中,傳統的DOS界面將會被SHELL環境所取代,所有的.exe檔案將不會在以後支持SHELL的環境中出現,取而代之的檔案後綴是.efi。在SHELL環境下,分為IA32和X64,32位的*.efi檔案不能在X64的計算機中運行。
描述 shell 命令重新初始化用戶的登錄會話。當給出該命令時,就會重新設定進程的控制終端的連線埠特徵,並取消對連線埠的所有訪問。然後 shell 命令為用戶把進程憑證和環境重新設定為
預設值 ,並執行用戶的初始程式。根據調用進程的登錄
用戶標識 建立所有的憑證和環境。
如果在可信路徑上調用 shell 命令,並且 /etc/security/user 檔案中用戶的 tpath 屬性沒有 always 值,那么就不維護終端的可信環境。
註:shell 命令不會重新設定用戶的登錄標識。
安全性
訪問控制 :該命令應該被 setuid 為 root 用戶,以重新設定用戶的進程憑證、授權執行(x)訪問所有用戶。該命令應該具有可信計算庫屬性。
檔案訪問:
方式 檔案
r /etc/passwd
r /etc/group
r /etc/security/audit/config
r /etc/security/environ
r /etc/security/limits
r /etc/security/user
審計事件:
事件 信息
USER_Shell portname
示例 要在使用可信 shell(tsh)之後將會話重新初始化為預設憑證和環境,請輸入:
shell
檔案 /usr/bin/shell 包含 shell 命令。
/etc/security/user 包含用戶的擴展屬性。
/etc/group 包含組標識。
/etc/security/audit/config 包含審計配置信息。
/etc/security/environ 定義用戶的環境屬性。
/etc/security/limits 定義每個用戶的進程資源限制。
希爾(Shell)排序是D.L.Shell於1959年提出的,他屬於
插入排序 方法,是不穩定的排序方法。
示例如下:
//希爾排序兄弟們#include "iostream.h"#include <process.h>//using namespace std;//使用命名空間時,要將頭檔案中的.h去掉#define N 50void 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");}
這段代碼在VC++ 6.0下編譯通過
VB語句 含義 執行一個
執行檔 ,返回一個
Variant (
Double ),如果成功的話,代表這個程式的任務 ID,若不成功,則會返回 0。
語法 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 函式成功地執行了所要執行的檔案,則它會返回程式的任務 ID。任務 ID 是一個唯一的數值,用來指明正在運行的程式。如果 Shell 函式不能打開命名的程式,則會產生錯誤。
注意 預設情況下,Shell 函式是以異步方式來執行其它程式的。也就是說,用Shell 啟動的程式可能還沒有完成執行過程,就已經執行到 Shell 函式之後的語句。
函式示例 示例一:
本示例使用Shell 函式來完成一個用戶指定的應用程式。
' 將第二個參數值設成1,可讓該程式以正常大小的視窗完成,並且擁有焦點。 Dim RetValRetVal = Shell("C:\WINDOWS\CALC.EXE", 1) ' 完成Calculator。
示例二:
使用shell腳本調用linux中當前時間,並記錄在log檔案中,10秒後再次記錄時間。
date>>/tmp/data.logsleep10date>>/tmp/data.log