shell概述
(1)Shell是一個命令行解釋器毅弧,它為用戶提供了一個向Linux內(nèi)核發(fā)送請求以便運行程序的界面系統(tǒng)級程序,用戶可以用Shell來啟動、掛起脚牍、停止甚至是編寫一些程序凉袱。
(2)由外至內(nèi)系統(tǒng)結(jié)構(gòu):
外層應(yīng)用程序<---->shell命令解釋器<--->內(nèi)核<---->硬件
解析:內(nèi)核管理硬件,在外層輸入ASCII由shell翻譯為內(nèi)核可以識別的機器語言0101,讓內(nèi)核操作硬件接著又將返回的結(jié)果翻譯到外層的圖形界面中.
(3)Shell還是一個功能相當(dāng)強大的編程語言,易編寫,易調(diào)試,靈活性較強闷板。Shell是解釋執(zhí)行的腳本語言,在Shell中可以直接調(diào)用Linux系統(tǒng)命令逗柴。
總結(jié): shell是一個命令解釋器蛹头,處于內(nèi)核和用戶之間,負(fù)責(zé)把用戶的指令傳遞給內(nèi)核并且把執(zhí)行結(jié)果回顯給用戶
shell常見類型
(1)Bourne Shell:從1979起Unix就開始使用Bourne Shell,Bourne Shell的主文件名為sh戏溺。
(2)C Shell: C Shell主要在BSD版的Unix系統(tǒng)中使用,其語法和C語言相類似而得名
(3)Shell的兩種主要語法類型有Bourne和C,這兩種語法彼此不兼容渣蜗。Bourne家族主要包括sh、ksh旷祸、Bash耕拷、psh、zsh;C家族主要包括:csh托享、tcsh
意義
- Shell 誕生于 Unix骚烧,是與 Unix/Linux 交互的腳本編程,單獨地學(xué)習(xí) Shell 是沒有意義的闰围,Linux都默認(rèn)集成了shell環(huán)境
- shell的功能點在于外部命令的使用止潘,實現(xiàn)命令自動化,它簡潔的腳本語言標(biāo)記方式辫诅,而且比C語言編寫的程序執(zhí)行更快、更有效率
- 其內(nèi)部數(shù)據(jù)處理方面涧狮,側(cè)重文本(或者說字符串炕矮,或字符流)處理,而對運算和其他基本數(shù)據(jù)結(jié)構(gòu)的原生較弱(例如常用的array者冤、set肤视、map等等)
實例
- 在Linux系統(tǒng)中我們經(jīng)常看見以:#!/bin/bash開頭的文件內(nèi)容涉枫,這就是聲明了該文件是一個基于bash的shell編程文件
- 啟動mongodb
寫了這么個程序
#!/bin/bash
cd /home/muller/mongodb/bin
./mongod --dbpath=../muller_db
我們知道計算在執(zhí)行指令的時候邢滑,是一條一條執(zhí)行的。那么很好理解以上這3行愿汰。依次操作的目的是:進(jìn)入mongodb/bin目錄困后,接著執(zhí)行啟動mongodb數(shù)據(jù)乐纸,保存為m.sh,這樣,只要我們在Linux終端執(zhí)行一條:sh m.sh摇予,回車汽绢,計算就會依次執(zhí)行指令,達(dá)到啟動mongodb數(shù)據(jù)庫的功能
實際中比如這么一個shell:
#!/bin/bash
cd /lamp
ls *.tar.gz > ls.list
for TAR in `cat ls.list`
do
tar -zxf $TAR
done
shell要解決的實際問題是將lamp目錄里面所有的壓縮包侧戴,批量解壓出來宁昭,這樣我們可以看出ls的結(jié)果集可以拿出來參與下一個指令的執(zhí)行。
shell編程酗宋,遠(yuǎn)遠(yuǎn)不止這些积仗,還有很多強大的地方,慢慢的挖掘與學(xué)習(xí)蜕猫。對于運維管理方面寂曹,Python也是一個很好的選擇。