複製鏈接
請複製以下鏈接發送給好友

shell

(計算機殼層)

編輯 鎖定
在計算機科學中,Shell俗稱殼(用來區別於核),是指“為使用者提供操作界面”的軟件(命令解析器)。它類似於DOS下的command.com和後來的cmd.exe。它接收用户命令,然後調用相應的應用程序
中文名
外文名
shell
性    質
命令解析器
用    途
接收用户命令

shell術語

編輯
window7中包含的shell window7中包含的shell
同時它又是一種程序設計語言。作為命令語言,它交互式解釋和執行用户輸入的命令或者自動地解釋和執行預先設定好的一連串的命令;作為程序設計語言,它定義了各種變量和參數,並提供了許多在高級語言中才具有的控制結構,包括循環和分支。
排序算法中,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 / zsh(Unix/linux 系統)
MS-DOS系統)
cmd.exe/ 命令提示字符(Windows NT 系統)
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的類型
UNIX中主要有:
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:
AIX下是Korn Shell.
Solaris缺省的是Bourne shell.
FreeBSD缺省的是C shell
HP-UX缺省的是POSIX shell.
Linux是Bourne Again shell.
Windows PowerShell是一種新的交互式的命令行和基於任務腳本編寫技術,它使信息技術(IT) 管理員能夠全面地自動操作和控制系統管理任務,從而提高了管理員的生產力。Windows PowerShell 包括多個系統管理實用工具、一致的語法和命名慣例、及對普通管理數據更好地導航,如登記、證書存儲 或 Windows Management Instrumentation (WMI)。Windows PowerShell 還專門針對 IT 管理,提供直觀的腳本編寫語言。
Shell也是一個VB函數,它的作用是運行程序,語法是Shell(命令字符串[,窗口類型])

shellshell 命令

編輯
常用命令
cat 文件名 輸出文件內容到基本輸出(屏幕 or 加>fileName 到另一個文件)
cb 格式化源代碼
chmod //change mode,改變文件的權限
cp copy
date 當前的時間和日期
echo $abc 在變量賦值之後,只需在變量前面加一個$去引用.
lint 語法檢查程序
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用途

編輯
使用用户的缺省憑證和環境執行 shell。
在UEFI環境下,EFI的Shell環境提供了一組豐富的擴展和增強的命令,在以後的計算機中,傳統的DOS界面將會被SHELL環境所取代,所有的.exe文件將不會在以後支持SHELL的環境中出現,取而代之的文件後綴是.efi。在SHELL環境下,分為IA32和X64,32位的*.efi文件不能在X64的計算機中運行。

shell描述

編輯
shell 命令重新初始化用户的登錄會話。當給出該命令時,就會重新設置進程的控制終端的端口特徵,並取消對端口的所有訪問。然後 shell 命令為用户把進程憑證和環境重新設置為缺省值,並執行用户的初始程序。根據調用進程的登錄用户標識建立所有的憑證和環境。
如果在可信路徑上調用 shell 命令,並且 /etc/security/user 文件中用户的 path 屬性沒有 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示例

編輯
要在使用可信 shell(tsh)之後將會話重新初始化為缺省憑證和環境,請輸入:
shell

shell文件

編輯
/usr/bin/shell 包含 shell 命令。
/etc/security/user 包含用户的擴展屬性。
/etc/passwd 包含用户標識
/etc/group 包含組標識。
/etc/security/audit/config 包含審計配置信息。
/etc/security/environ 定義用户的環境屬性。
/etc/security/limits 定義每個用户的進程資源限制。
希爾(Shell)排序
希爾(Shell)排序是D.L.Shell於1959年提出的,他屬於插入排序方法,是不穩定的排序方法。
示例如下:
//希爾排序兄弟們
#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");
}


這段代碼在VC++ 6.0下編譯通過

shellVB語句

編輯

shell含義

執行一個可執行文件,返回一個Variant (Double),如果成功的話,代表這個程序的任務 ID,若不成功,則會返回 0。

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