【Linux】一步一步學Linux——初識Linux命令解析器(10)

00. 目錄

@
參考博客: https://blog.csdn.net/dengjin20104042056/article/details/94669639shell

01. Shell簡介

在計算機科學中,Shell俗稱殼(用來區別於核),是指「爲使用者提供操做界面」的軟件(命令解析器)。它相似於DOS下的command.com和後來的cmd.exe。它接收用戶命令,而後調用相應的應用程序。編程

[外鏈圖片轉存失敗(img-n2EQMtPJ-1562641251457)(assets/1562638860330.png)]windows

shell同時又是一種程序設計語言。做爲命令語言,它交互式解釋和執行用戶輸入的命令或者自動地解釋和執行預先設定好的一連串的命令;做爲程序設計語言,它定義了各類變量和參數,並提供了許多在高級語言中才具備的控制結構,包括循環和分支。bash

02. 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 系統)spa

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)。

03. 交互式shell和非交互式shell

交互式shell和非交互式shell(interactive shell and non-interactive shell)
交互式模式就是在終端上執行,shell等待你的輸入,而且當即執行你提交的命令。這種模式被稱做交互式是由於shell與用戶進行交互。這種模式也是大多數用戶很是熟悉的:登陸、執行一些命令、退出。當你退出後,shell也終止了。
非交互式模式,以shell script(非交互)方式執行。在這種模式 下,shell不與你進行交互,而是讀取存放在文件中的命令,而且執行它們。當它讀到文件的結尾EOF,shell也就終止了。
能夠經過打印「$-」變量的值(表明着當前shell的選項標誌),查看其中的「i」選項(表示interactive shell)來區分交互式與非交互式shell。

交互式shell

[deng@localhost ~]$ echo $-
himBH

非交互式shell

deng@localhost ~]$ cat test.sh 
echo $-
[deng@localhost ~]$ ./test.sh  
hB
[deng@localhost ~]$

04. 登陸shell和非登陸shell

登陸shell:是須要用戶名、密碼登陸後才能進入的shell(或者經過」–login」選項生成的shell)。
非登陸shell:固然就不須要輸入用戶名和密碼便可打開的Shell,例如:直接命令「bash」就是打開一個新的非登陸shell,在Gnome或KDE中打開一個「終端」(terminal)窗口程序也是一個非登陸shell。
執行exit命令,退出一個shell(登陸或非登陸shell);執行logout命令,退出登陸shell(不能退出非登陸shell)。

//登陸shell
[deng@localhost ~]$ bash --login
[deng@localhost ~]$ logout
//登陸shell
[deng@localhost ~]$ bash --login
[deng@localhost ~]$ exit
登出

//非登陸shell
[deng@localhost ~]$ bash
[deng@localhost ~]$ logout
bash: logout: 不是登陸shell: 使用 `exit'
[deng@localhost ~]$ exit
exit
[deng@localhost ~]$

bash是 login shell 時,其進程名爲」-bash「 而不是」bash」。 好比下面的命令行演示:
man bash: A login shell is one whose first character of argument zero is a -, or one started with the –login option.

在chinaunix論壇中看到的關於登陸shell與非登陸shell、交互式shell與非交互式shell的討論:
Login Shell:當init3時,mingetty spawn出登陸提示符的時候,你輸入賬號和密碼進入了,出現了shell提示符,這個過程就是登陸shell;
Interactive Shell:接下來你獲得了一個像「root@host />」這樣的提示符,你輸入什麼,它就解釋出什麼,這就是交互式shell;你在當前shell又fork了一個 shell(bash),這個bash也是交互式shell。一般狀況下interactive shell是login shell派生出來的。
Non Interactive Shell:你須要寫一個bash script,用外部shell執行「bash script.sh」命令,它(bash)從能夠第一條命令執行到最後一條而後退出,不與你進行任何交互,它就是非交互式shell。
交互式非登陸shell,例如你在Gnome圖形界面中打開「終端」出來的那種窗口程序,和登陸shell相比,它是「非登陸」的,你並不須要輸入用戶名和密碼,和非交互式shell相比,這是「交互式」的,就像你說的那它「你輸入什麼,它就解釋什麼」。

對於Bash來講,登陸shell(包括交互式登陸shell和使用「–login」選項的非交互shell),它會首先讀取和執行/etc/profile全局配置文件中的命令,而後依次查找~/.bash_profile、~/.bash_login 和 ~/.profile這三個配置文件,讀取和執行這三個中的第一個存在且可讀的文件中命令。除非被「–noprofile」選項禁止了。在非登陸shell裏,只讀取 ~/.bashrc (和 /etc/bash.bashrc、/etc/bashrc )文件,不一樣的發行版裏面可能有所不一樣,如RHEL7.5中非登陸shell僅執行了「~/.bashrc」文件(沒有執行/etc/bashrc),而Ubuntu16.04中卻依次執行了/etc/bash.bashrc 和 ~/.bashrc 文件。
對於這些規則,能夠直接在相應的配置文件中加一些echo命令來驗證其真實性。

05. 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 管理,提供直觀的腳本編寫語言。

06. 參考

百度百科

相關文章
相關標籤/搜索