1. 什麼是shell命令windows系統也有shell命令嗎
Shell(也稱為殼層)在計算機科學中指「為用戶提供用戶界面」的軟體,通常指的是命令行界面的解析器。一般來說,這個詞是指操作系統中提供訪問內核所提供之服務的程序。Shell也用於泛指所有為用戶提供操作界面的程序,也就是程序和用戶交互的層面。因此與之相對的是內核(英語:Kernel),內核不提供和用戶的交互功能。
不過這個詞也拿來指應用軟體,或是任何在特定組件外圍的軟體,例如瀏覽器或電子郵件軟體是HTML排版引擎的Shell。Shell這個詞是來自於操作系統(內核)與用戶界面的外層界面。
通常將shell分為兩類:命令行與圖形界面。命令行殼層提供一個命令行界面(CLI);而圖形殼層提供一個圖形用戶界面(GUI)。
[Wikipedia:殼層]
==========================
虛擬終端機(英語:Terminal emulator)是在個人電腦上虛擬的一個終端以及為此目的而寫的軟體。虛擬終端的目的是達到個人電腦及其用戶能夠與大型計算機的連接。一般來說需要連接的大型計算機是IBM的大型計算機或者所謂的超小型計算機(過去往往是迪吉多的VAX)。
虛擬終端使得個人電腦的用戶可以直接使用他的個人電腦來與大型計算機聯系,而不必使用專門的終端。
通過虛擬終端的軟體虛擬終端還可以擴展大型計算機的標准終端的功能,通過虛擬終端不但可以將個人電腦上的數據傳遞給大型計算機,而且還可以將大型計算機的數據傳遞給個人電腦,並在個人電腦上繼續加工。
一般大型計算機的終端是字母式的輸入和輸出介面,因此一個虛擬終端至少需要一個能夠模擬這樣的字母式(比如ASCII)輸入和輸出介面的能力。最常見的平台是圖像式的用戶表面。要使得新的、圖像式的程序能夠使用老的字母式的或者沒有圖像式輸入和輸出能力的程序也需要虛擬終端。
現代的大型計算機也內部使用虛擬終端,這樣它們可以向老的、需要終端的程序假裝一個終端,而實際上它則將程序的顯示轉到顯卡上。比如Linux以及其它大多數基於個人電腦的類似Unix的操作系統假裝有六至十個這樣的「虛擬」的終端。
[Wikipedia:虛擬終端]
==========================
Windows命令提示符(cmd.exe)是Windows NT下的一個用於運行Windows控制台程序或某些DOS程序的殼層程序;或在Windows CE下只用於運行控制台程序的殼層程序。它被用於替代Windows 9x系統中所提供的COMMAND.COM和「MS-DOS提示符」。命令提示符的最初版本由Therese Stowell開發。
[Wikipedia:命令提示符]
==========================
PowerShell(包括Windows PowerShell和PowerShell Core)是微軟公司開發的任務自動化和配置管理框架,由.NET Framework和.NET Core是構建的命令行界面殼層相關腳本語言組成,最初僅Windows組件,後於2016年8月18日開源並跨平台支持。[3]
在PowerShell中,管理任務通常由cmdlets(發音為command-lets)執行,這是執行特定操作的專用.NET類。可以將cmdlet集合至腳本、可執行文件(一般是獨立應用程序)中,或通過常規.NET類(或WMI / COM對象)實例化。[4][5]通過訪問不同數據存儲中的數據由PowerShell運行,如資源管理器或注冊表。
[Wikipedia:Windows PowerShell]
==========================
Windows shell是Microsoft Windows操作系統的圖形用戶界面。Windows shell易於識別的元素包括桌面、任務欄、開始菜單、任務切換器和自動播放等特徵。在某些版本的Windows上,還包括Flip 3D和魅力(charms)等功能。在Windows 10中,Windows Shell Experience Host界面可以驅動視覺效果,如「開始」菜單,「操作中心」和「任務欄」、Task View/Timeline。另外,Windows shell還實現了一個shell命名空間,該命名空間使Windows上運行的計算機程序能夠通過shell對象架構訪問計算機的資源。「桌面」是層次結構的頂級對象,在它之下有一些存儲在磁碟上的文件和文件夾,以及一些內容為虛擬或動態創建的特殊文件夾,如垃圾箱、控制面板、我的計算機、我的網路位置等等。
基本上講,Shell是由文件夾組成的,文件夾是一個包含有子元素的容器,包括子文件夾,這些元素通常稱為文件夾項。根文件夾稱為『桌面』,其子項包括『我的計算機』,『網上鄰居』,『回收站』,和其他可能的項,所有這些文件夾的集合稱之為Shell的命名空間。文件夾實際上是一個Shell對象,它的行為被編碼成一個COM模塊,向Windows Shell暴露公共的介面。通過連接,文件夾可以告訴Shell怎樣設計它的內容,使用什麼樣的圖標顯示,採用什麼文字來描述。文件對象是一個包含在普通文件夾中的項—文件、記錄、內存塊、連接的設備等。『文件夾項』、『文件夾元素』和『文件對象』這些術語是等價的。任何文件夾的內容都是通過一個對象調用Shell viewer顯示在Windows explorer.exe中的。每一個文件夾都定義了他自己的Shell viewer對象,並且所有相關於這個用戶介面的任務都指派到這個對象上。
從概念上講,桌面是所有Windows Shell對象的父對象,即宿主對象。就實現方式而言,桌面是一個系統定義窗口類的特殊窗口(命名為#32769),並且是所有窗口的祖先窗口。那些導出應用的頂層窗口一般而言都是桌面的子窗口。[1]
主要的Windows Shell部件就是任務欄,它實際上就是由explorer.exe進程所擁有的一個窗口。當終止explorer.exe進程的時候,都將引起任務條的消失和重新顯現。每當任務欄重新顯現的時候,它注冊一個具有不同HWND的新窗口。任務條擁有「開始」按鈕的窗口,在托盤區域有時鍾和類似按鈕的控制項,表示正在運行的應用。任務條實際上與窗口一樣,可以在其上作任何窗口上可以做的操作如移動、隱藏和子類化等。
explorer.exe是一個扮演著系統外殼角色的應用程序。當說到外殼擴展的時候,就是由explorer.exe感知的、裝入的並最終執行的代碼塊。explorer.exe可以被看作為一個微型的窗口開發環境:它有自己的函數和對話框;允許寫特殊的與已存在的體系集成的應用程序;能包容應用和文檔。甚至可以解釋任何活動的腳本兼容語言的腳本(VBScript,JScript,Perl,等等)。採用COM介面和進程內伺服器(實質上的DLL)
在Win16環境中,與Shell唯一的通訊方式是通過動態數據交換(DDE)。
[Wikipedia:Windows Shell]
2. 闡述shell程序的執行和跟蹤方法
Shell是什麼?任何發明都具有供用戶使用的界面。UNIX供用戶使用的界面就是Shell(DOS的command熟悉吧,但UNIX的要強大的多)。Shell為用戶提供了輸入命令和參數並可得到命令執行結果的環境。為了不同的需要,UNIX提供了不同的Shell。現在的UNIX大部分都支持BourneShell,以下教程就以BourneShell(Bsh)為例,一步步的領略UNIX Shell的強大功能,佔先其強大魅力,達到更方便靈活的管理、應用UNIX的目的。1.UNIX內核和Shell的交互方法啟動UNIX時,程序UNIX(內核)將被調入計算機內存,並一直保留在內存中直到機器關閉。在引導過程中,程序init將進入後台運行一直到機器關閉。該程序查詢文件/etc/inittab,該文件列出了連接終端的各個埠及其特徵。當發現一個活動的終端時,init程序調用getty程序在終端上顯示login等登陸信息。(username和passwd),在輸入密碼後,getty調用login進程,該進程根據文件/etc/passwd的內容來驗證用戶的身份。若用戶通過身份驗證,login進程把用戶的home目錄設置成當前目錄並把控制交給一系列setup程序。setup程序可以是指定的應用程序,通常setup程序為一個Shell程序,如:/bin/sh 即Bourne Shell(command出來了,呵呵)。得到控制後,Shell程序讀取並執行文件/etc/.profile以及.profile。這兩個文件分別建立了系統范圍內的和該用戶自己的工作環境。最後Shell顯示命令提示符,如$。(這是以bsh為例,若是csh,為.cshrc,ksh為.kshrc,bash為.bashrc等等) 注不妨把/etc/.profile和.profile看成DOS的autoexec.bat 或config.sys文件)當shell退出時,內核把控制交給init程序,該程序重新啟動自動登陸過程。有兩種方法使shell退出,一是用戶執行exit命令,二是內核(例如root用kill命令)發出一個kill命令結束shell進程。shell退出後,內核回收用戶及程序使用的資源。用戶登陸後,用戶命令同計算機交互的關系為:命令進程--->Shell程序--->UNIX內核--->計算機硬體。當用戶輸入一個命令,如$ls,Shell將定位其可執行文件/bin/ls並把其傳遞給內核執行。內核產生一個新的子進程調用並執行/bin/ls。當程序執行完畢後,內核取消該子進程並把控制交給其父進程,即Shell程序。例如執行:$ps該命令將會列出用戶正在執行的進程,即Shell程序(下來詳細說說,別急現在)和ps程序。若執行:$sleep 10 & $ps其中第一條命令將產生一個在後台執行的sleep子進程。ps命令執行時會顯示出該子進程。每當用戶執行一條命令時,就會產生一個子進程。該子進程的執行與其父進程或Shell完全無關,這樣可以使Shell去做其他工作。(Shell只是把用戶的意圖告訴內核,然後該幹嘛幹嘛) 現在windows有個計劃任務(在固定的時間,日期自動執行某任務),其實UNIX很早就有這個功能了,也就是所謂的Shell的自動執行。一些UNIX資源,如cron可以自動執行Shell程序而無需用戶的參與,(這個功能好象在/var/spool/crotab目錄里)。Crontab 程序對於系統管理員來說是非常有用的。Cron服務用於計劃程序在特定時間(月、日、周、時、分)運行。我們以root的crontab 為例。根用戶的crontab 文件放在 /var/spool/crontab/root 中,其格式如下:(1) (2) (3) (4) (5) (6)0 0 * * 3 /usr/bin/updatedb1. 分鍾 (0-60)2. 小時 (0-23)3. 日 (1-31)4. 月 (1-12)5. 星期 (1-7)6. 所要運行的程序2.Shell的功能和特點1>命令行解釋2>使用保留字3>使用Shell元字元(通配符)4>可處理程序命令5>使用輸入輸出重定向和管道6>維護一些變數7>運行環境控制8>支持Shell編程對於"命令行解釋"就不多說了,就是在shell提示符(例如:"$","%","#"等)後輸入一行unix命令,Shell將接收用戶的輸入。"使用保留字":Shell有一些具有特殊意義的字,例如在Shell腳本中,do,done,for等字用來控制循環操作,if,then等控制條件操作。保留字隨Shell環境的不同而不同。"通配符":* 匹配任何位置? 匹配單個字元[] 匹配的字元范圍或列表 例如:$ls [a-c]*將列出以a-c范圍內字元開頭的所有文件$ls [a,m,t]*將列出以e,m或t開頭的所有文件"程序命令" :當用戶輸入命令後,Shell讀取環境變數$path(一般在用戶自己的.profile中設置),該變數包含了命令可執行文件可能存在的目錄列表。shell從這些目錄中尋找命令所對應的可執行文件,然後將該文件送給內核執行。"輸入輸出重定向及管道" :重定向的功能同DOS的重定向功能:">" 重定向輸出"<" 重定向輸入而管道符號,是unix功能強大的一個地方,符號是一條豎線:"|",用法:command 1 | command 2 他的功能是把第一個命令command 1執行的結果作為command 2的輸入傳給command 2,例如:$ls -s|sort -nr|pg該命令列出當前目錄中的所有文件,並把輸出送給sort命令作為輸入,sort命令按數字遞減的順序把ls的輸出排序。然後把排序後的內容傳送給pg命令,pg命令在顯示器上顯示sort命令排序後的內容。"維護變數" :Shell可以維護一些變數。變數中存放一些數據供以後使用。用戶可以用"="給變數賦值,如: $lookup=/usr/mydir該命令建立一個名為lookup的變數並給其賦值/usr/mydir,以後用戶可以在命令行中使用lookup來代替/usr/mydir,例如:$echo $lookup結果顯示:/usr/mydir為了使變數能被子進程使用,可用exprot命令,例如:$lookup=/usr/mydir$export lookup"運行環境控制" :當用戶登陸啟動shell後,shell要為用戶創建一個工作的環境,如下:1>當login程序激活用戶shell後,將為用戶建立環境變數。從/etc/profile和.profile文件中讀出,在這些文件中一般都用$TERM變數設置終端類型,用$PATH變數設置Shell尋找可執行文件的路徑。2>從/etc/passwd文件或命令行啟動shell時,用戶可以給shell程序指定一些參數,例如"-x",可以在命令執行前顯示該命令及其參數。後面詳細介紹這些參數。"shell編程" :本文主要介紹的內容。shell本身也是一種語言(*可以先理解為unix命令的組合,加上類C的條件,循環等程序控制語句,類似dos批處理,但要強大的多),用戶可以通過shell編程(腳本,文本文件),完成特定的工作。SHELL變數下面我們詳細的介紹Bourne Shell的編程:自從貝爾實驗室設計了BourneShell。從那時起許多廠商根據不同的硬體平台設計了許多版本得unix。但在眾多版本的unix中,Bourne Shell一直保持一致。1>Bsh的啟動:用戶在登陸後,系統根據文件/etc/passwd中有關該用戶的信息項啟動Shell。例如某用戶在passwd中的信息項為:ice_walk:!:411:103:Imsnow ,ice_walk:/home/ice_walk:/bin/bsh則表明,用戶名是ice_walk等信息,在最後一項"/bin/bsh"表明用戶的sh環境類型是bsh,於是系統啟動之。在啟動或執行(包括下面我們要講的shell程序--腳本)過程中可以使用以下一些參數,我們一一說明:-a 將所有變數輸出-c "string"從string中讀取命令-e 使用非互動式模式-f 禁止shell文件名產生-h 定義-i 互動式模式-k 為命令的執行設置選項-n 讀取命令但不執行-r 受限模式-s 命令從標准輸入讀取-t 執行一命令,然後退出shell-u 在替換時,使用未設置的變數將會出錯-v 顯示shell的輸入行-x 跟蹤模式,顯示執行的命令許多模式可以組合起來用,您可以試試了,但-ei好象不行,你說why呢?使用set可以設置或取消shell的選項來改變shell環境。打開選項用"-",關閉選項用"+",多數unix允許打開或關閉a、f、e、h、k、n、uv和x選項。若顯示Shell中已經設置的選項,執行:$echo $-Bsh中每個用戶的home目錄下都有一個.profile文件,可以修改該文件來修改shell環境。為了增加一個可執行文件的路徑(例如/ice_walk/bin),可以把下面代碼加入.profile中PATH=$PATH:/ice_walk/bin;exprot PATH.profile中shell的環境變數意思如下:CDPATH 執行cd命令時使用的搜索路徑HOME 用戶的home目錄IFS 內部的域分割符,一般為空格符、製表符、或換行符MAIL 指定特定文件(信箱)的路徑,有UNIX郵件系統使用PATH 尋找命令的搜索路徑(同dos的config.sys的 path)PS1 主命令提示符,默認是"$"PS2 從命令提示符,默認是">"TERM 使用終端類型2>Bsh里特殊字元及其含義在Bsh中有一組非字母字元。這些字元的用途分為四類:作為特殊變數名、產生文件名、數據或程序控制以及引用和逃逸字元控制。他們可以讓用戶在Shell中使用最少的代碼完成復雜的任務。*> Shell變數名使用的特殊字元$# 傳送給命令Shell的參數序號$- 在Shell啟動或使用set命令時提供選項$? 上一條命令執行後返回的值$$ 當前shell的進程號$! 上一個子進程的進程號$@ 所有的參數,每個都用雙括弧括起$* 所有參數,用雙括弧括起$n 位置參數值,n表示位置$0 當前shell名*>產生文件名的特殊字元包括"*","?","[]",上面講過,不再多說。*>數據或程序控制使用的特殊字元>(file) 輸出重定向到文件中(沒有文件則創建,有則覆蓋)>>(file) 輸出重定向到文件中(沒有則創建,有則追加到文件尾部)<(file) 輸入重定向到文件 ; 命令分割符| 管道符 & 後台運行(例如:sleep 10 &) ` ` 命令替換,重定向一條命令的輸出作為另一命令的參數。*>對於引用或逃逸的特殊字元Bsh用單引號' '和雙引號" "將特殊字元或由空白分隔的字引用起來組成一個?
3. 如何執行shell腳本其中一條命令
方法一:切換到shell腳本所在的目錄(此時,稱為工作目錄)執行shell腳本:
復制代碼代碼如下:
cd /data/shell
./hello.sh
./的意思是說在當前的工作目錄下執行hello.sh。如果不加上./,bash可能會響應找到不到hello.sh的錯誤信息。因為目前的工作目錄(/data/shell)可能不在執行程序默認的搜索路徑之列,也就是說,不在環境變數PASH的內容之中。查看PATH的內容可用 echo $PASH 命令。現在的/data/shell就不在環境變數PASH中的,所以必須加上./才可執行。
方法二:以絕對路徑的方式去執行bash shell腳本:
復制代碼代碼如下:
/data/shell/hello.sh
方法三:直接使用bash 或sh 來執行bash shell腳本:
復制代碼代碼如下:
cd /data/shell
bash hello.sh
或
復制代碼代碼如下:
cd /data/shell
sh hello.sh
注意,若是以方法三的方式來執行,那麼,可以不必事先設定shell的執行許可權,甚至都不用寫shell文件中的第一行(指定bash路徑)。因為方法三是將hello.sh作為參數傳給sh(bash)命令來執行的。這時不是hello.sh自己來執行,而是被人家調用執行,所以不要執行許可權。那麼不用指定bash路徑自然也好理解了啊,呵呵……。
方法四:在當前的shell環境中執行bash shell腳本:
復制代碼代碼如下:
cd /data/shell
. hello.sh
或
復制代碼代碼如下:
cd /data/shell
source hello.sh
前三種方法執行shell腳本時都是在當前shell(稱為父shell)開啟一個子shell環境,此shell腳本就在這個子shell環境中執行。shell腳本執行完後子shell環境隨即關閉,然後又回到父shell中。而方法四則是在當前shell中執行的。
4. shell鑴氭湰涓鎬庝箞鎵ц屽彉閲忛噷鐨勫懡浠わ紵錛堟墽琛岄棶棰樿ˉ鍏呬腑鍙橀噺v_endcomm錛
鏈変袱縐嶆柟寮:
(1) 鎶妚_endcomm閲岄潰鐨勫懡浠ゅ叏閮ㄦ嬁鍑烘潵, 鍗崇洿鎺
echo $v_full" | sed '1,/)/d' | sed 's/,$//'"
(2) 鎶婁笂榪板懡浠ゅ仛鎴愪竴涓鍑芥暟, 鍑芥暟鍚嶄負v_endcomm
v_endcomm(){
echo $v_full" | sed '1,/)/d' | sed 's/,$//'"
}
鐒跺悗璋冪敤v_endcomm鍗沖彲
5. 如何用SHELL命令運行一個文件
1、Shell是命令解釋器,所執行的文件有兩種,一種是基於ELF文件格式的可執行文件,一種是基於Shell腳本格式的腳本文件。
2、不管是可執行文件還是shell腳本,如果存在於PATH變數所指明的路徑中,shell會自動尋找相應的可執行文件,用戶只需要輸入可執行文件名或者腳本名即可執行。
3、如果可執行文件或者Shell腳本的存放位置不在PATH變數所指明的路徑中,則需要通過".」來執行,比如下面的C語言寫的hello world程序,需要輸入./t才可以被shell運行。
6. shell腳本如何重復執行命令
curl補上了-k,跳過https的證書驗證
watch -d -n 3 "curl -k -sS --connect-timeout 2 -s 2 'https://www..com'"