shell的歷史


shell的歷史

shell概況

人想要和操作系統進行交互,傳送指令給操作系統,就需要使用到shell。宏義的shell是人與機器交互的頁面,它分為兩種,一種是有界面的,比如GUI,另外一種是沒有界面的,完全是指令操作的(CLI)。我們一般說的shell指的就是命令行界面。

Bourne shell

最早Ken Thompson設計Unix的時候,使用的是命令解釋器,命令解釋器接受用戶的命令,然后解釋他們並執行。

后來出現了Bourne shell(通稱為sh),顧名思義,就是一個叫Bourne shell創建的。對,它就是現在我們機器上面的/bin/sh這個可執行文件。這個老哥創建的sh一直沿用至今,現在的UNIX操作系統都配置有sh,而且各種新的shell都會向后兼容sh的語法。

Bourne shell 帶來了:

  • 腳本可以寫在文件里被調用,比如sh a.sh可以執行a.sh里面的shell命令
  • 可以交互或者非交互的方式調用
  • 可以同步執行也可以異步執行
  • 支持輸入輸出的pipeline,就是管道方式
  • 支持輸入輸出的重定向,就是現在使用的> 和 >>
  • 提供一系列內置命令
  • 提供流程控制基本的函數和結構
  • 弱類型變量,就是可以直接 a=1,不需要指定a為int
  • 提供本地和全局的變量作用域
  • 腳本執行前不需要編譯
  • 去掉goto功能
  • 使用``進行命令執行替換
  • 增加了for~do~done的循環
  • 增加了case~in~esac的條件選擇
  • 文件描述符2>代表錯誤信息導出

csh, ksh

Bourne老爺子創造的sh非常強大,后來引入的爭議是Unix系統是C寫的,為什么你的shell的語法不像C呢?然后Bill Joy就編寫了C Shell(csh)。它用最類似C的語法來編寫shell。后來csh演化成了tchsh,但是csh后面的路途就比較坎坷了,最終未能流行起來。但是現在比如在Mac系統上還保留csh。

Korn Shell(ksh)是1983年出現的,它向后兼容Bourne shell。同時吸取了C shell的一些優點,比如job control。

bash

在1989年,現在最廣泛使用的Bash出現了,它的全稱叫做Bourne-Again shell。目的是為了與POSIX的標准保持一致,同時保持對sh的兼容。其實現在很多機器上的/bin/sh往往都鏈接到bash,我們以為我們是使用Bourne shell,實際上我們使用的是Bourne-Again shell。

文件/etc/shells給出了系統中所有已知的shell

[root@localhost vagrant]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
/bin/ksh

shell的設置和查找

我們可以為每個用戶指定不同的默認shell,在/etc/passwd中設置就可以了

postgres:x:503:503::/home/postgres:/bin/bash

如何查看自己的默認shell

echo $SHELL

如何查看當前的shell

echo $0


免責聲明!

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



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