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


00. 目錄

@


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

01. Shell簡介

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

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

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

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 系統)

MS-DOS系統)cmd.exe/ 命令提示字符([Windows NT](https://baike.baidu.com/item/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](https://baike.baidu.com/item/Windows PowerShell)是一種新的交互式的命令行和基於任務腳本編寫技術,它使信息技術(IT) 管理員能夠全面地自動操作和控制系統管理任務,從而提高了管理員的生產力。Windows PowerShell 包括多個系統管理實用工具、一致的語法和命名慣例、及對普通管理數據更好地導航,如登記、證書存儲 或 Windows Management Instrumentation (WMI)。Windows PowerShell 還專門針對 IT 管理,提供直觀的腳本編寫語言。

06. 參考

百度百科


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM