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
